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

如何通过Graph API更新AD B2C中联合用户的UserPrincipalName

问题根因

Azure AD B2C 中的联合身份壳用户的 userPrincipalName 与用户身份集合(identities)中的联邦身份标识强关联,不支持直接单独更新 UserPrincipalName 属性,仅修改内存中的联邦身份项值也不会触发生效,需要提交完整的身份集合更新请求。

正确实现步骤

  1. 先读取目标用户的完整 identities 集合,定位到 SignInType 为 federated 且 Issuer 对应外部 Azure AD 租户的身份项
  2. 修改该联邦身份项的 IssuerAssignedId 为新的邮箱值
  3. 同步更新用户的 mail 属性为新邮箱(匹配你用邮箱作为UPN的业务逻辑)
  4. 将修改后的完整 identities 集合和其他需要更新的属性一起提交更新请求
  5. 确保调用 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:48:02