如何将Azure AD B2C现有用户与外部IDP身份进行关联?
可行的实现方法
方法1:调用Microsoft Graph专用接口添加联邦身份标识
Update user接口确实不支持直接修改identities数组,但微软提供了专门向指定用户追加身份标识的接口,可直接绑定外部IDP身份:
- 接口地址:
POST /users/{用户的Azure AD对象ID}/identities - 所需权限:需要提前为调用的应用授予应用权限
User.ManageIdentities.All或Directory.ReadWrite.All,委托权限无法调用该接口 - 请求体示例:
{ "signInType": "federated", "issuer": "你在Azure AD B2C中配置KeyCloak IDP时对应的发行人(issuer)值,需与KeyCloak返回的ID令牌中的iss声明完全一致", "issuerAssignedId": "KeyCloak侧对应用户的唯一标识,即ID令牌中的sub声明值" }
调用成功后,该用户的identities数组中就会新增对应的联邦身份条目,后续用户用KeyCloak账号登录时会直接匹配到这个现有Azure AD用户,不会创建新账号。
方法2:通过自定义策略实现自助/自动关联
如果需要支持用户自助关联,或者批量匹配场景,可以配置Azure AD B2C自定义策略(IEF):在用户通过KeyCloak登录的流程中增加声明转换规则,用邮箱、手机号等唯一属性匹配现有Azure AD用户,匹配成功后自动将联邦身份写入该用户的identities数组,无需手动调用API。
注意事项
issuer和issuerAssignedId的组合全局唯一,不能重复绑定到多个Azure AD用户- 绑定操作只会追加身份标识,不会覆盖用户原有的本地账号、其他联邦身份等登录方式
- 绑定完成后可调用
GET /users/{用户对象ID}?$select=identities验证绑定结果
内容的提问来源于stack exchange,提问作者Luca Riccitelli
相关产品推荐
相关产品推荐

