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

Azure AD B2C调用Graph创建用户报proxyAddresses重复错误

报错根因
  • Azure AD 全租户维度强制约束proxyAddresses属性值全局唯一,不允许两个目录对象持有相同的属性值。你之前邀请的租户管理员属于Guest类外部用户,邀请流程触发时系统会自动为其生成格式为SMTP:<受邀邮箱地址>的proxyAddresses条目,已经占用了对应邮箱的SMTP地址记录。
  • 你当前的创建代码显式给新本地用户设置了Mail = theEmail,调用Microsoft Graph创建LocalAccount类型用户时,服务端会自动基于Mail属性值生成对应SMTP格式的proxyAddresses条目,和已有管理员用户的记录撞值,因此抛出重复错误。
  • GUI操作可以成功创建的原因是:Azure Portal界面创建B2C本地用户时,你填写的邮箱仅会被写入Identities节点作为登录凭据,不会自动给新用户的Mail属性赋值,也就不会自动生成对应的SMTP proxyAddress记录,自然不会触发冲突。
修复方法

优先选择无侵入的方案,直接删除创建用户代码中显式赋值的Mail = theEmail行即可,修改后的代码示例:

var user = new User
{
    AccountEnabled = true,
    GivenName = "MJX",
    Surname = MJX,
    // 移除 Mail = theEmail 配置项
    DisplayName = "Someting",
    UserType = "Member",
    CreationType = "LocalAccount",
    PasswordProfile = new PasswordProfile
    {
        ForceChangePasswordNextSignIn = true,
        Password = GeneratedPassword,
    },
    PasswordPolicies = "DisablePasswordExpiration",
    Identities = new List<ObjectIdentity>
    {
        new ObjectIdentity()
        {
            SignInType = "emailAddress",
            Issuer = tenantName,
            IssuerAssignedId = theEmail
        }
    }
};

// 调用Graph接口创建用户
var createdUser = graphServiceClient.Users
    .Request()
    .AddAsync(user).GetAwaiter().GetResult();

该方案创建出的本地用户和GUI手动创建的用户属性完全一致,不设置Mail属性不会影响用户邮箱登录、密码重置、邮件通知等B2C核心功能。

如果业务场景强制要求给本地用户填充Mail属性,需要先修改已有管理员账号的配置:

  • 先通过Graph接口查询到目标管理员用户的proxyAddresses属性列表
  • 移除列表中值为SMTP:<目标邮箱>的条目(注意:如果该管理员需要使用该邮箱接收Azure相关通知邮件,不建议执行此操作)
  • 保存管理员用户的配置变更后,再执行本地用户创建流程即可。

补充说明:不要尝试通过给新用户设置空proxyAddresses的方式绕过校验,创建LocalAccount类型用户时,只要给Mail属性赋值,服务端就会自动追加对应的SMTP proxyAddress,无法跳过该逻辑。

内容的提问来源于stack exchange,提问作者MJ X

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:48:26