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

Azure B2C自定义策略配置多租户登录时issuerAssignedId不符合预期

Azure B2C 自定义策略Microsoft多租户登录issuerAssignedId不一致问题解决方案

问题根因

自定义策略默认的Microsoft身份提供商技术配置,将issuerAssignedId映射为了微软返回的oid声明,该声明是用户在所属租户内的全局唯一ID,为GUID格式;而内置用户流、你原有的IdentityServer4部署使用的是sub声明,该声明是针对特定客户端ID的成对唯一标识符,就是你之前获取到的长字符串格式,与ClientID绑定,相同ClientID下同一用户返回值完全一致。

修复配置

  • 调整声明映射:找到你自定义策略中定义的Microsoft多租户技术配置,将issuerAssignedId的映射源从oid改为sub:
    原有默认配置一般为:
    <OutputClaim ClaimTypeReferenceId="issuerAssignedId" PartnerClaimType="oid" />
    
    修改为:
    <OutputClaim ClaimTypeReferenceId="issuerAssignedId" PartnerClaimType="sub" />
    
    确保你的技术配置的Scope参数已经包含openid,sub是OpenID Connect标准必返声明,只要配置了该scope即可正常获取。
  • 对齐issuer取值:为了保证和内置流用户关联逻辑一致,避免同一微软账号被识别为不同身份,需要固定issuer声明的取值,添加如下输出声明:
    <OutputClaim ClaimTypeReferenceId="issuer" DefaultValue="https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0" AlwaysUseDefaultValue="true" />
    
    该取值为Azure B2C内置Microsoft账户提供商默认使用的issuer值,对齐后已通过内置流登录过的用户,切换到自定义策略后会自动关联原有账号,无需额外操作。

迁移场景适配

从原有IdentityServer4迁移时,因为你使用了相同的ClientID,获取到的sub值和IdentityServer4中存储的用户外部ID完全一致,通过MS Graph导入用户时,直接将原有ID作为issuerAssignedId,上述固定的issuer值作为issuer写入B2C用户的身份信息集合即可完成关联,原有用户无需重新注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:03