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

如何通过Microsoft Graph API根据用户Object ID获取认证手机号及解决Azure B2C中userPrincipalName显示异常问题

解决方案:从Azure B2C用户中提取认证手机号

这是Azure B2C手机号注册用户的典型场景问题,我来帮你一步步解决:

为什么userPrincipalName显示为Object ID?

当用户通过手机号注册Azure B2C时,平台默认不会将手机号填充到userPrincipalName字段,而是用用户的Object ID来填充这个字段——这是B2C的设计逻辑,所以你在API里看到的结果是符合预期的,实际的手机号存储在另一个属性中。

如何获取正确的认证手机号?

用户的手机号信息存储在identities属性里,这是一个数组类型的字段,里面包含了用户所有的登录身份(比如手机号、邮箱等)。你需要筛选出signInType为phoneNumber的项,对应的issuerAssignedId就是用户的认证手机号。

1. 通过Object ID获取单个用户的手机号

使用Microsoft Graph API的GET /users/{object-id}接口,记得通过$select参数指定返回identities属性(默认不会返回所有属性):

GET https://graph.microsoft.com/v1.0/users/{your-user-object-id}?$select=id,displayName,identities

返回的响应中,你可以从identities数组里提取手机号,示例响应片段:

{
  "id": "abc123-xyz-456-def-789ghi",
  "displayName": "Test User",
  "identities": [
    {
      "signInType": "phoneNumber",
      "issuer": "your-b2c-tenant-name.onmicrosoft.com",
      "issuerAssignedId": "+8613800138000"
    }
  ]
}

2. 获取用户列表时批量提取手机号

如果要批量获取所有用户的手机号,同样在请求中加上$select=identities:

GET https://graph.microsoft.com/v1.0/users?$select=id,displayName,identities

然后遍历每个用户的identities数组,筛选出signInType为phoneNumber的项即可。

注意事项

  • 权限要求:确保你的Graph API应用已获得User.Read.All(只读)或User.ReadWrite.All(读写)的应用权限,并且完成了管理员同意。
  • 多身份场景:如果用户同时绑定了手机号和邮箱等多种登录方式,identities数组会包含多个项,记得通过signInType精准筛选你需要的手机号项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:17:44