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

在Azure AD B2C中处理随机查询字符串值

AD B2C读取动态查询参数并写入JWT的解决方案

场景参考说明

这个场景属于AD B2C自定义策略中传递和保留请求参数的典型场景,AD B2C原生支持通过声明解析器获取请求中的查询参数,并将其注入到返回的JWT令牌中。

配置修改步骤

1. 定义声明类型

首先在策略的<BuildingBlocks>下的<ClaimsSchema>中,为需要读取的参数添加对应的声明类型,比如针对示例里的xyz和token参数:

<ClaimsSchema>
  <ClaimType Id="xyz">
    <DisplayName>XYZ Parameter</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
  <ClaimType Id="token">
    <DisplayName>Token Parameter</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
</ClaimsSchema>

2. 调整现有技术配置文件

修改你提供的Get-Parameters技术配置,替换为对应参数的声明解析表达式,确保启用声明解析:

<ClaimsProvider>
  <DisplayName>Check Parameters</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Get-Parameters">
      <DisplayName>Profile to extract request query parameters</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
      </Metadata>            
      <OutputClaims>
        <!-- 读取URL中的xyz参数 -->
        <OutputClaim ClaimTypeReferenceId="xyz" DefaultValue="{oauth-kv:xyz}" AlwaysUseDefaultValue="true"/>
        <!-- 读取URL中的token参数 -->
        <OutputClaim ClaimTypeReferenceId="token" DefaultValue="{oauth-kv:token}" AlwaysUseDefaultValue="true"/>
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>
  • 核心修改:把{oauth-kv:my_parameter}替换为实际的参数名,比如{oauth-kv:xyz}和{oauth-kv:token},每个参数对应一个<OutputClaim>节点。
  • 语法说明:{oauth-kv:参数名}是AD B2C的声明解析器语法,专门用于提取请求URL中的查询参数值。

3. 在用户旅程中调用该技术配置

将Get-Parameters技术配置添加到用户旅程的早期步骤中(比如登录/注册流程起始阶段),确保参数在流程启动时就被读取:

<UserJourney Id="SignUpOrSignIn">
  <OrchestrationSteps>
    <!-- 保留原有步骤,插入以下步骤 -->
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="GetParametersExchange" TechnicalProfileReferenceId="Get-Parameters"/>
      </ClaimsExchanges>
    </OrchestrationStep>
    <!-- 后续登录/注册步骤 -->
  </OrchestrationSteps>
</UserJourney>

4. 将声明添加到令牌输出

最后,在信赖方技术配置(通常是PolicyProfile)中添加这些声明,确保它们被包含在返回给应用的JWT令牌里:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn"/>
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="OpenIdConnect"/>
    <OutputClaims>
      <!-- 保留原有声明 -->
      <OutputClaim ClaimTypeReferenceId="displayName"/>
      <OutputClaim ClaimTypeReferenceId="givenName"/>
      <!-- 新增自定义参数声明 -->
      <OutputClaim ClaimTypeReferenceId="xyz"/>
      <OutputClaim ClaimTypeReferenceId="token"/>
    </OutputClaims>
    <SubjectNamingInfo ClaimType="sub"/>
  </TechnicalProfile>
</RelyingParty>

关键注意事项

  • 参数名大小写敏感:oauth-kv解析器对参数名大小写严格匹配,必须和Web应用传递的参数名完全一致。
  • 空值处理:AlwaysUseDefaultValue="true"会在参数不存在时将声明设为空字符串,避免流程报错。
  • 安全校验:如果参数包含敏感信息,建议在策略中添加验证步骤,确保参数格式符合预期,防范注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:50:35