Azure B2C能否访问并处理外部IDP Access Token中的声明?
问题解答
Azure B2C 没有提供内置语法可以直接在自定义策略流程里引用外部身份提供商返回Access Token中的内嵌声明,你查到的将ClaimsProvider协议从OpenIdConnect改为OAuth2的方案不具备可行性,该配置不会自动完成Access Token解析和声明提取,反而会丢失OpenIdConnect协议原生的元数据拉取、ID Token合法性校验等核心能力,极易出现登录流程异常。
你可以根据实际场景选择以下两种可落地的方案实现需求:
- 方案一(优先推荐):调整外部Azure AD IDP的声明返回规则,直接将所需声明注入返回给B2C的ID Token
由于你使用的外部IDP本身就是Azure AD,不需要绕路解析Access Token:直接在Azure AD对应用户流/应用注册的声明配置中,将amr这类你需要的字段添加为ID Token的返回声明,之后在B2C的OpenIdConnect ClaimsProvider配置中增加一条声明映射即可:
配置完成后B2C会直接从外部IDP返回的ID Token中读取到<OutputClaim ClaimTypeReferenceId="externalAmr" PartnerClaimType="amr" />amr值,你可以直接在用户旅程中添加条件判断分支,比如检测到amr值未包含MFA相关标识时,强制触发Azure B2C的MFA验证步骤,这是稳定性最高、符合官方设计逻辑的实现方式。 - 方案二:若你无法修改外部IDP的ID Token返回配置,通过自定义API完成Access Token解析
保留你当前已经配置的identityProviderAccessToken透传规则,在外部IDP登录步骤完成后,插入一个REST API技术配置文件步骤:- 将拿到的
identityProviderAccessToken作为入参传给你自行部署的轻量API - API侧完成Access Token的签名校验、颁发者校验、过期校验后,解码提取出
amr等你需要的声明,返回给B2C - 将API返回的目标声明存入B2C声明袋,后续即可像使用普通内置声明一样,基于这些值做流程分支判断。
- 将拿到的
注意:不要尝试直接用B2C内置的JWT解析声明转换处理外部IDP的Access Token,内置JWT校验逻辑仅信任策略中预先配置的签名密钥,外部IDP的Access Token签名密钥不在默认信任范围内,直接解析会触发校验失败,无法拿到有效声明。
内容的提问来源于stack exchange,提问作者Appleoddity
相关产品推荐
相关产品推荐

