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声明的取值,添加如下输出声明:
该取值为Azure B2C内置Microsoft账户提供商默认使用的issuer值,对齐后已通过内置流登录过的用户,切换到自定义策略后会自动关联原有账号,无需额外操作。<OutputClaim ClaimTypeReferenceId="issuer" DefaultValue="https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0" AlwaysUseDefaultValue="true" />
迁移场景适配
从原有IdentityServer4迁移时,因为你使用了相同的ClientID,获取到的sub值和IdentityServer4中存储的用户外部ID完全一致,通过MS Graph导入用户时,直接将原有ID作为issuerAssignedId,上述固定的issuer值作为issuer写入B2C用户的身份信息集合即可完成关联,原有用户无需重新注册。
内容的提问来源于stack exchange,提问作者Nick Albrecht
相关产品推荐
相关产品推荐

