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

AD B2C自定义用户旅程:过期令牌重定向URL添加邮箱及错误捕获

解决AD B2C中id_token_hint过期(AADB2C90208)时追加邮箱到重定向URL的方案

核心背景说明

AADB2C对id_token_hint的有效性校验是授权端点的内置前置逻辑,不会暴露在自定义用户旅程的步骤编排中,因此你排查用户旅程找不到验证步骤是正常现象。我们需要通过自定义策略的错误处理框架,结合声明转换来捕获错误并提取邮箱。

具体实现步骤

1. 声明所需的Claim类型

在自定义策略的<ClaimSchema>节点中添加以下声明,用于存储邮箱、id_token_hint及重定向URL:

<ClaimSchema>
  <ClaimType Id="email">
    <DisplayName>Email Address</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
  <ClaimType Id="id_token_hint">
    <DisplayName>ID Token Hint</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
  <ClaimType Id="redirect_uri">
    <DisplayName>Redirect URI</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
</ClaimSchema>

2. 定义声明转换规则

添加两个声明转换:一个从过期的id_token_hint中提取邮箱(注:过期JWT的Payload为Base64编码明文,可直接解析,无需验证签名);另一个将邮箱追加到重定向URL:

<ClaimsTransformations>
  <!-- 从过期的id_token_hint中提取邮箱声明 -->
  <ClaimsTransformation Id="ExtractEmailFromExpiredIdTokenHint" TransformationMethod="GetClaimFromIdTokenHint">
    <InputParameters>
      <InputParameter Id="claimType" DataType="string" Value="email" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="email" TransformationClaimType="extractedClaim" />
    </OutputClaims>
  </ClaimsTransformation>

  <!-- 将邮箱追加到重定向URL末尾 -->
  <ClaimsTransformation Id="AppendEmailToRedirectUri" TransformationMethod="StringFormat">
    <InputParameters>
      <InputParameter Id="inputClaimType" DataType="string" Value="redirect_uri" />
      <InputParameter Id="stringFormat" DataType="string" Value="{0}?email={{{email}}}" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="redirect_uri" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>

3. 创建错误处理技术配置文件

定义专门处理AADB2C90208错误的技术配置文件,负责捕获错误、提取邮箱并构造新的重定向URL:

<TechnicalProfiles>
  <TechnicalProfile Id="HandleExpiredIdTokenHintError">
    <DisplayName>Handle AADB2C90208 Error</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ErrorHandlerProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
      <Item Key="ErrorCode">AADB2C90208</Item>
      <Item Key="AllowRedirectWithClaims">true</Item>
    </Metadata>
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="id_token_hint" />
      <InputClaim ClaimTypeReferenceId="redirect_uri" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="email" />
    </OutputClaims>
    <OutputClaimsTransformations>
      <OutputClaimsTransformation ReferenceId="ExtractEmailFromExpiredIdTokenHint" />
      <OutputClaimsTransformation ReferenceId="AppendEmailToRedirectUri" />
    </OutputClaimsTransformations>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
  </TechnicalProfile>
</TechnicalProfiles>

4. 映射错误到处理逻辑

在自定义策略的<Errors>节点中,将AADB2C90208错误绑定到上述技术配置文件:

<Errors>
  <Error ErrorType="AADB2C90208" Handler="TechnicalProfile" HandlerParameter="HandleExpiredIdTokenHintError" />
</Errors>

5. 确保传递必要的输入声明

在<RelyingParty>节点中添加id_token_hint作为输入声明,确保策略能获取到该参数:

<RelyingParty>
  <DefaultUserJourney ReferenceId="YourCustomUserJourneyId" />
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="id_token_hint" />
  </InputClaims>
  <!-- 其他依赖方配置 -->
</RelyingParty>

关键注意事项

  • 若原重定向URL已包含查询参数,需调整AppendEmailToRedirectUri的格式为{0}&email={{{email}}}避免URL格式错误。
  • 确保你的应用注册允许重定向URL包含自定义参数,AD B2C默认支持此配置。
  • 过期id_token_hint的Payload必须包含email声明,否则无法提取,需确保生成该令牌时已包含此声明。

内容的提问来源于stack exchange,提问作者Luka Gospodnetic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:57:05