如何通过Graph API更新AD B2C中联合用户的UserPrincipalName
问题根因
Azure AD B2C 中的联合身份壳用户的 userPrincipalName 与用户身份集合(identities)中的联邦身份标识强关联,不支持直接单独更新 UserPrincipalName 属性,仅修改内存中的联邦身份项值也不会触发生效,需要提交完整的身份集合更新请求。
正确实现步骤
- 先读取目标用户的完整
identities集合,定位到SignInType为federated且Issuer对应外部 Azure AD 租户的身份项 - 修改该联邦身份项的
IssuerAssignedId为新的邮箱值 - 同步更新用户的
mail属性为新邮箱(匹配你用邮箱作为UPN的业务逻辑) - 将修改后的完整
identities集合和其他需要更新的属性一起提交更新请求 - 确保调用 Graph 的应用已被分配
User.ReadWrite.All应用权限
代码示例
// 先获取用户完整身份信息 var graphUser = await _graphServiceClient.Users[idpId] .Request() .Select(u => new { u.Identities, u.Mail }) .GetAsync(); // 修改联邦身份的IssuerAssignedId var identities = graphUser.Identities.ToList(); var federatedIdentity = identities.FirstOrDefault(i => i.SignInType == "federated"); if (federatedIdentity != null) { federatedIdentity.IssuerAssignedId = "mynameuser@federatedAAD.org"; } // 构造更新请求,提交完整identities集合和mail属性 var updatedUser = new User { Identities = identities, Mail = "mynameuser@federatedAAD.org" // 其他需要更新的用户属性 }; await _graphServiceClient.Users[idpId] .Request() .UpdateAsync(updatedUser);
注意事项
更新完成后,B2C会自动同步更新壳用户的 userPrincipalName,无需手动赋值。请确保修改后的 IssuerAssignedId 与你自定义策略中联邦身份的用户匹配逻辑一致,避免后续用户登录时出现账号匹配失败的问题。
内容的提问来源于stack exchange,提问作者Sdiego
相关产品推荐
相关产品推荐

