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

如何使用Azure AD B2C自定义策略调用多个ClaimsEndpoint

在Azure AD B2C自定义策略中使用多个ClaimsEndpoint的解决方案

没问题,Azure AD B2C自定义策略完全支持配置多个ClaimsEndpoint来获取不同来源的声明,你可以通过两种常见方式实现:


方法1:在单个Technical Profile中配置多个ClaimsEndpoint

你可以在同一个Restful类型的Technical Profile里添加多个<ClaimsEndpoint>节点,每个节点对应一个第三方API的调用,只要给每个节点分配唯一的Id即可。每个ClaimsEndpoint可以独立指定请求URL、HTTP方法、请求头、输出声明等。

示例配置如下:

<TechnicalProfile Id="MultiClaimsEndpointProfile">
  <DisplayName>Get multiple claims from different APIs</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="AuthenticationType">None</Item>
    <Item Key="SendClaimsIn">Url</Item>
  </Metadata>
  <!-- 第一个ClaimsEndpoint -->
  <ClaimsEndpoint Id="FirstApiEndpoint">
    <Endpoint Url="https://first-api.example.com/claims" />
    <HttpMethod>GET</HttpMethod>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="firstPartyClaim1" PartnerClaimType="external_claim_1" />
      <OutputClaim ClaimTypeReferenceId="firstPartyClaim2" PartnerClaimType="external_claim_2" />
    </OutputClaims>
  </ClaimsEndpoint>
  <!-- 第二个ClaimsEndpoint -->
  <ClaimsEndpoint Id="SecondApiEndpoint">
    <Endpoint Url="https://second-api.example.com/user-details" />
    <HttpMethod>POST</HttpMethod>
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="userId" PartnerClaimType="user_id" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="secondPartyClaim1" PartnerClaimType="user_profile_field" />
      <OutputClaim ClaimTypeReferenceId="secondPartyClaim2" PartnerClaimType="user_preference" />
    </OutputClaims>
  </ClaimsEndpoint>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

注意事项:

  • 每个<ClaimsEndpoint>必须有唯一的Id属性,避免冲突
  • 可以根据每个API的要求设置不同的HttpMethod、InputClaims(请求参数)和OutputClaims(返回的声明映射)
  • 如果第三方API需要认证,可以在对应ClaimsEndpoint的<Metadata>里配置AuthenticationType(比如Bearer)并添加<AuthenticationClaims>

方法2:链式调用多个独立的Technical Profiles

如果不同的ClaimsEndpoint逻辑差异较大(比如需要不同的认证方式、错误处理),你可以创建多个独立的Technical Profile,然后在用户旅程(User Journey)中按顺序调用它们,或者通过IncludeTechnicalProfile来链式调用。

示例1:在用户旅程中添加多个步骤

<UserJourney Id="SignUpOrSignInWithMultipleClaims">
  <OrchestrationSteps>
    <!-- 步骤1:用户登录/注册 -->
    <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
      <ClaimsProviderSelections>
        <ClaimsProviderSelection TargetClaimsExchangeId="FacebookExchange" />
        <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
      </ClaimsProviderSelections>
      <ClaimsExchanges>
        <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <!-- 步骤2:调用第一个API获取声明 -->
    <OrchestrationStep Order="2" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="FirstApiExchange" TechnicalProfileReferenceId="FirstApiClaimsProfile" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <!-- 步骤3:调用第二个API获取声明 -->
    <OrchestrationStep Order="3" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="SecondApiExchange" TechnicalProfileReferenceId="SecondApiClaimsProfile" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <!-- 后续步骤:生成B2C令牌 -->
    <OrchestrationStep Order="4" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
  </OrchestrationSteps>
  <ClientDefinition ReferenceId="DefaultWeb" />
</UserJourney>

示例2:在Technical Profile中链式调用

<TechnicalProfile Id="CombinedClaimsProfile">
  <DisplayName>Chain multiple claim retrieval profiles</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.CompositeProfileProvider, Web.TPEngine" />
  <IncludeTechnicalProfile ReferenceId="FirstApiClaimsProfile" />
  <IncludeTechnicalProfile ReferenceId="SecondApiClaimsProfile" />
</TechnicalProfile>

这种方式的优势是每个Technical Profile职责单一,便于维护和调试,还能分别配置各自的会话管理、错误处理规则。


关键注意点

  • 确保所有获取到的声明都在<ClaimSchema>中定义过,否则无法映射到B2C令牌
  • 如果需要将这些第三方声明包含在最终的B2C令牌中,要在JwtIssuer Technical Profile的<OutputClaims>里添加对应的声明引用
  • 注意API调用的性能,避免过多的ClaimsEndpoint导致用户旅程延迟过长

内容的提问来源于stack exchange,提问作者V. G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:41:34