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

跨Azure AD B2C租户联合时User ID声明映射失效问题

问题描述

参照官方《Set up sign-up and sign-in with an Azure AD B2C account from another Azure AD B2C tenant》文档指引,采用user flow策略类型完成跨Azure AD B2C租户身份提供商配置后,基础注册登录功能可正常运行,但在「Configure Azure AD B2C as an identity provider」章节的自定义身份提供商声明映射环节出现异常。
尝试将自定义用户属性映射到User ID声明时,若将该属性映射到Given Name等其他声明,映射逻辑可正常生效,具体现象如下:

  • Fabrikam B2C租户中配置了名为Clock Number的自定义用户属性,直接运行该租户的注册/登录user flow时,返回令牌中的sub声明值对应用户的ObjectID,可正常识别该自定义属性。
    (附现象截图:自定义声明在令牌中正常显示)
  • 在Contoso B2C租户中,将extension_ClockNumber映射到Given Name后运行注册/登录user flow,Clock Number取值可正确映射到given_name声明,但此时sub声明的取值不再是用户的ObjectID,不符合预期。
    (附现象截图:sub声明取值异常)
  • 若将extension_ClockNumber映射到User ID后运行user flow,映射逻辑未生效,预期extension_ClockNumber的取值应出现在sub声明中但实际未实现。
    (附现象截图:映射到User ID时未生效)

根因说明

这是Azure AD B2C user flow的固有设计规则,不属于配置错误:

  1. 联邦身份提供商配置中的User ID映射项,作用是指定从联邦IdP返回的哪个claim作为联邦用户的唯一标识,Azure AD B2C会用该值填充本地目录中联邦用户对象的alternativeSecurityId属性,作为跨租户关联用户的唯一凭据,不会直接将该值输出到令牌的sub声明中。
  2. 映射到Given Name时sub取值异常,是因为未将User ID映射项绑定到联邦IdP返回的用户唯一标识(即Fabrikam租户返回的用户ObjectID/sub/oid声明),导致B2C无法正确生成联邦用户的本地唯一标识,最终sub取值错乱。
  3. 映射自定义属性到User ID不生效有两个核心原因:
    • 跨租户传递自定义扩展属性时,属性名会自动携带源租户扩展应用的ID前缀,完整格式为extension_{源租户b2c-extensions-app无连字符客户端ID}_ClockNumber,直接使用extension_ClockNumber无法匹配到源属性。
    • sub属于Azure AD B2C的系统保留声明,user flow层面未开放自定义替换该声明取值的能力,无论怎么配置映射,都无法直接修改sub的生成逻辑。

修复步骤
  1. 修正基础映射,恢复sub声明正常取值
    必须显式将Fabrikam租户返回的用户ObjectID(对应oid/sub声明)映射到Contoso侧IdP配置的User ID项,禁止将其他自定义属性映射到该位置,否则会持续出现sub异常、重复创建联邦用户等问题。
  2. 正确配置自定义属性映射
    • 登录Fabrikam B2C租户,进入「应用注册」-「所有应用」,找到名为b2c-extensions-app. Do not modify. Used by AADB2C for storing user data.的系统应用,复制其客户端ID并删除所有连字符。例如客户端ID为123e4567-e89b-12d3-a456-426614174000,处理后为123e4567e89b12d3a456426614174000。
    • 回到Contoso租户的联邦IdP声明映射页,自定义属性的源声明填写完整格式:extension_<上一步获取的无连字符客户端ID>_ClockNumber。
    • 将该源声明映射到Contoso租户侧新建的同名自定义用户属性(比如新建Clock Number自定义属性),不要尝试映射到sub等系统保留声明。
    • 进入对应user flow的「应用程序声明」配置页,勾选新增的Clock Number属性,重新运行user flow即可在令牌中拿到正确的属性值。

补充说明:如果业务强依赖将Clock Number作为令牌sub声明的取值,user flow无法实现该需求,必须切换使用Azure AD B2C自定义策略(IEF)自行配置声明生成逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:03:18