如何通过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
相关产品推荐
相关产品推荐

