You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SM-AAD持久化声明中读取会话的objectId?

从SM-AAD会话持久化声明中读取objectId的实现方法

核心思路

当你的登录技术配置文件使用UseTechnicalProfileForSessionManagement = SM-AAD时,登录后SM-AAD会将指定的声明持久化到会话中。要在修改密码流程中获取objectId,只需确保该声明被正确持久化,并在后续流程中从会话提取即可。

具体步骤

  1. 确保登录流程持久化objectId
    在登录技术配置文件中,明确输出objectId声明,并在SM-AAD会话管理配置中指定持久化该声明:

    <!-- 登录技术配置文件 -->
    <TechnicalProfile Id="Login-NonInteractive">
      <DisplayName>本地账户登录</DisplayName>
      <Protocol Name="OpenIdConnect"/>
      <Metadata>
        <Item Key="UseTechnicalProfileForSessionManagement">SM-AAD</Item>
      </Metadata>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId"/>
        <!-- 其他必要输出声明,如用户名、邮箱等 -->
      </OutputClaims>
    </TechnicalProfile>
    
    <!-- SM-AAD会话管理配置 -->
    <TechnicalProfile Id="SM-AAD">
      <DisplayName>会话管理提供者</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      <Metadata>
        <Item Key="SessionExpiryType">Absolute</Item>
        <Item Key="SessionExpiryInSeconds">86400</Item>
        <Item Key="DataPersistedOnClaim">objectId</Item>
        <!-- 多个声明用逗号分隔,如"objectId,displayName" -->
      </Metadata>
    </TechnicalProfile>
    
  2. 在修改密码流程中读取会话中的objectId
    在修改密码的用户旅程里,先添加一个读取会话声明的步骤,将objectId提取出来,再传入修改密码的技术配置文件:

    <!-- 修改密码用户旅程 -->
    <UserJourney Id="PasswordReset">
      <OrchestrationSteps>
        <!-- 步骤1:从会话读取objectId -->
        <OrchestrationStep Order="1" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="ReadSessionObjectId" TechnicalProfileReferenceId="SM-AAD-SessionRead"/>
          </ClaimsExchanges>
        </OrchestrationStep>
        <!-- 步骤2:调用修改密码接口,传入objectId -->
        <OrchestrationStep Order="2" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="PasswordResetExchange" TechnicalProfileReferenceId="AAD-UserPasswordReset"/>
          </ClaimsExchanges>
        </OrchestrationStep>
        <!-- 后续收尾步骤 -->
      </OrchestrationSteps>
    </UserJourney>
    
    <!-- 读取会话声明的技术配置文件 -->
    <TechnicalProfile Id="SM-AAD-SessionRead">
      <DisplayName>读取会话声明</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.DefaultSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId"/>
      </OutputClaims>
    </TechnicalProfile>
    
    <!-- 修改密码技术配置文件 -->
    <TechnicalProfile Id="AAD-UserPasswordReset">
      <DisplayName>重置密码</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureActiveDirectoryProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      <Metadata>
        <Item Key="Operation">ChangePassword</Item>
        <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
      </Metadata>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="objectId" Required="true"/>
        <!-- 其他输入声明,如新密码、确认密码等 -->
      </InputClaims>
      <OutputClaims/>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD"/>
    </TechnicalProfile>
    
  3. 简化已有查询步骤的处理
    如果你已经有查询AD获取objectId的步骤,只需确保该步骤的输出声明包含objectId,并通过SM-AAD持久化后,后续流程直接从会话读取即可,无需重复查询AD。

内容的提问来源于stack exchange,提问作者The Chos3n Ron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:38:20