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

Azure AD本地账户用户邮件属性只读及密码重置问题问询

解决Azure AD B2C中Graph API设置邮箱导致重置密码失败的问题

我来帮你拆解这个问题,这其实是Azure AD B2C对邮箱属性的管理逻辑导致的,咱们一步步说:

为什么mail属性提示“read-only”?

在Azure AD B2C里,mail属性是系统自动维护的,并非手动可写字段。它的值会在用户首次成功验证邮箱地址后自动填充,所以直接通过Graph API设置这个字段肯定会报错。你不用尝试手动修改它,只要确保用户的邮箱完成验证,系统会自动处理这个属性。

为什么设置otherMails后出现AADB2C90161错误?

AADB2C90161错误的核心原因是:B2C的忘记密码流程只认已验证的邮箱地址。

当你通过Graph API直接把邮箱加到otherMails里时,这个邮箱处于未验证状态——B2C不会默认信任这个邮箱属于用户本人,所以在重置密码流程里会找不到合法的验证邮箱,从而抛出这个错误。

而你在AAD界面手动添加邮箱时,界面会立即要求发送验证邮件,只有用户点击链接完成验证后,这个邮箱才会被保存到otherMails里,此时它是已验证状态,所以重置密码流程能正常识别。

正确的解决方案:通过Graph API完成邮箱验证

要让邮箱能用于重置密码,你需要通过Graph API触发邮箱验证流程,而不是直接写入属性。具体步骤如下:

1. 创建用户时设置登录邮箱(可选)

如果是本地账户(非社交登录账户),你可以在创建用户时指定signInNames里的邮箱(作为用户的登录凭证),但此时邮箱仍处于未验证状态:

POST https://graph.microsoft.com/v1.0/users
Content-Type: application/json
{
  "accountEnabled": true,
  "displayName": "John Doe",
  "mailNickname": "johndoe",
  "userPrincipalName": "john.doe@your-b2c-tenant.onmicrosoft.com",
  "passwordProfile": {
    "forceChangePasswordNextSignIn": true,
    "password": "YourStrongPass123!"
  },
  "signInNames": [
    {
      "type": "emailAddress",
      "value": "john.doe@example.com"
    }
  ]
}

2. 调用Graph API发送验证邮件

创建用户后,调用sendVerificationEmail接口向目标邮箱发送验证链接:

POST https://graph.microsoft.com/v1.0/users/{user-id}/sendVerificationEmail
Content-Type: application/json
{
  "emailAddress": "john.doe@example.com"
}

3. 用户完成验证

用户点击邮件中的验证链接后,系统会自动完成以下操作:

  • 将mail属性设置为这个已验证的邮箱
  • 把该邮箱添加到otherMails列表中,并标记为已验证
  • 若之前设置了signInNames,对应的登录邮箱也会被标记为已验证

完成这些步骤后,用户就能正常使用这个邮箱进行密码重置了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:36:02