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

如何在Azure中将assertion传递的自定义声明存入访问令牌声明?

在Azure AD中实现从JWT Bearer断言提取自定义数据到访问令牌声明

针对你需要将urn:ietf:params:oauth:grant-type:jwt-bearer请求中assertion参数的自定义字段,提取并添加到Azure返回的访问令牌自定义声明中的需求,可按以下步骤操作:

1. 确认Azure AD应用基础配置

  • 确保你的应用已在Azure AD中完成注册,且启用了JWT Bearer授权类型(在应用的身份验证页面,检查支持的授权流是否包含该类型)。
  • 验证客户端凭据(client_id、client_secret)配置正确,可正常接收该授权类型的请求。

2. 根据Azure AD类型选择配置方式

场景A:使用Azure AD B2C(面向客户身份管理)

通过自定义策略实现断言解析与声明注入:

  1. 编辑TrustFrameworkExtensions.xml自定义策略文件:
    • 添加声明转换规则,用于解析assertion中的自定义字段:
      <ClaimsTransformation Id="ExtractCustomClaimsFromAssertion" TransformationMethod="GetClaimFromJwt">
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="assertion" TransformationClaimType="jwtToken" />
        </InputClaims>
        <InputParameters>
          <InputParameter Id="claimName" DataType="string" Value="custom_field_1" />
        </InputParameters>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="customField1" TransformationClaimType="extractedClaim" />
        </OutputClaims>
      </ClaimsTransformation>
      
      重复上述配置可提取多个自定义字段。
    • 在用户旅程(UserJourney)的编排步骤中,添加该转换规则,确保在颁发令牌前执行:
      <OrchestrationStep Order="5" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="ExtractCustomClaims" TechnicalProfileReferenceId="ExtractCustomClaimsProfile" />
        </ClaimsExchanges>
      </OrchestrationStep>
      
    • 在RelyingParty节点中,将自定义声明添加到输出列表,指定要包含在访问令牌中:
      <OutputClaim ClaimTypeReferenceId="customField1" PartnerClaimType="https://yourdomain.com/claims/custom_field1" />
      
  2. 上传并发布更新后的自定义策略。

场景B:使用Azure AD企业版(面向内部员工身份管理)

通过令牌颁发策略实现声明提取:

  1. 使用PowerShell创建令牌转换规则:
    # 定义策略内容,提取assertion中的custom_field_1字段
    $policyDefinition = @'
    [
      {
        "RuleType": "ClaimsTransformation",
        "ClaimsTransformation": {
          "TransformationMethod": "ExtractClaimFromJwt",
          "InputClaims": [
            {
              "ClaimType": "assertion",
              "TransformationClaimType": "jwtToken"
            }
          ],
          "OutputClaims": [
            {
              "ClaimType": "customField1",
              "TransformationClaimType": "extractedClaim",
              "ClaimValue": "custom_field_1"
            }
          ]
        }
      }
    ]
    '@
    
    # 创建令牌颁发策略
    $policy = New-AzureADApplicationTokenIssuancePolicy -Definition $policyDefinition -DisplayName "ExtractCustomDataFromAssertion" -IsOrganizationDefault $false
    
  2. 将策略关联到你的应用:
    # 替换为你的应用ObjectId和策略ObjectId
    Add-AzureADApplicationPolicy -ObjectId "your-app-object-id" -RefObjectId $policy.ObjectId
    

3. 验证配置

发送授权请求到Azure令牌端点(https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token),携带assertion参数(包含自定义字段的有效JWT),解析返回的访问令牌,检查是否包含配置的自定义声明。

关键注意事项

  • assertion中的JWT必须签名有效,签名算法需符合Azure要求(推荐RS256),且受众(aud)需指向你的Azure应用或租户ID。
  • 自定义声明建议使用自定义命名空间(如https://yourdomain.com/claims/前缀),避免与Azure AD默认声明冲突。
  • 若使用B2C,需确保自定义策略已正确发布,且用户旅程的编排步骤顺序合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:20