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

Azure AD B2C自定义策略中获取OAuth2 Bearer令牌并调用安全API传递用户声明的问题排查

解决方案:Azure AD B2C自定义策略中调用带Bearer认证的REST API

首先直接给结论:你确实需要同时调用这两个REST技术配置文件,而且必须按照「先获取AccessToken,再调用业务API」的顺序来执行。下面帮你拆解问题原因和正确的配置方式:

问题原因分析

  1. 单独调用REST-API-SignUp报错:因为这个技术配置文件依赖bearerToken声明生成Bearer认证头,但此时这个声明还未被创建,自然会提示找不到。
  2. 同时调用上传失败:大概率是你在用户旅程中对两个技术配置文件的调用方式不正确(比如步骤顺序错误,或者未确保声明能在步骤间传递)。

正确的配置方式

1. 确保bearerToken声明已定义

首先检查你的ClaimsSchema里是否有这个声明,如果没有,添加进去:

<ClaimsSchema>
    <ClaimType Id="bearerToken">
        <DisplayName>Bearer Token for API</DisplayName>
        <DataType>string</DataType>
        <AdminHelpText>Store the access token acquired for calling the secure API</AdminHelpText>
    </ClaimType>
    <!-- 其他已有的声明... -->
</ClaimsSchema>

2. 在用户旅程中按顺序调用两个技术配置文件

你有两种可选的调用方式:

方式一:将两个ClaimsExchange放在同一个OrchestrationStep中

这种方式会在同一个步骤里先执行获取token,再调用业务API:

<OrchestrationStep Order="8" Type="ClaimsExchange">
    <ClaimsExchanges>
        <!-- 第一步:获取AccessToken,存入bearerToken声明 -->
        <ClaimsExchange Id="AcquireAPIToken" TechnicalProfileReferenceId="REST-AcquireAccessToken" />
        <!-- 第二步:使用bearerToken调用业务API -->
        <ClaimsExchange Id="RESTPostUserClaims" TechnicalProfileReferenceId="REST-API-SignUp" />
    </ClaimsExchanges>
</OrchestrationStep>

方式二:分成两个连续的OrchestrationStep

如果你需要在两个步骤之间添加其他逻辑,也可以分成两个步骤:

<!-- 步骤8:获取AccessToken -->
<OrchestrationStep Order="8" Type="ClaimsExchange">
    <ClaimsExchanges>
        <ClaimsExchange Id="AcquireAPIToken" TechnicalProfileReferenceId="REST-AcquireAccessToken" />
    </ClaimsExchanges>
</OrchestrationStep>

<!-- 步骤9:调用业务API -->
<OrchestrationStep Order="9" Type="ClaimsExchange">
    <ClaimsExchanges>
        <ClaimsExchange Id="RESTPostUserClaims" TechnicalProfileReferenceId="REST-API-SignUp" />
    </ClaimsExchanges>
</OrchestrationStep>

3. 额外的检查项

  • 确认REST-AcquireAccessToken中的scope值正确:必须是你注册的API应用的/.default范围,格式为https://{tenant}.onmicrosoft.com/{api-client-id}/.default
  • 检查密钥容器中的B2C_1A_SecureRESTClientId和B2C_1A_SecureRESTClientSecret是否正确对应API应用的客户端ID和密钥
  • 确保API应用已经授予了你的B2C策略应用(调用token端点的应用)对应的应用权限,并且已经完成管理员同意

为什么之前的同时调用会失败?

如果之前你尝试同时调用但上传失败,可能是以下原因:

  • 两个步骤的顺序反了:先调用了业务API再获取token
  • bearerToken声明未在ClaimsSchema中定义,导致策略无法识别这个声明

按照上面的配置调整后,应该就能顺利获取token并调用你的安全API了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:42:28