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

GraphServiceClient获取Azure AD B2C用户时属性缺失问题求助

解决Azure AD B2C调用Graph API获取本地账户用户名的问题

核心问题分析

  1. Graph API默认返回的是精简版用户对象,identities不属于默认返回字段,所以你拿到的是null,必须显式指定要获取该属性。
  2. Azure AD B2C本地账户的userPrincipalName是系统自动生成的格式(通常为{用户名}_{租户ID}.onmicrosoft.com),和控制台显示的用户登录名不是同一个值,你要的test123这类用户名实际存在于identities属性中。

具体解决方案

1. 修改Graph API请求,显式指定需要的属性

调用GraphServiceClient时,通过.Select()方法明确指定要获取identities等字段,示例代码:

var currentUser = await graphServiceClient.Me
    .Request()
    .Select("displayName, userPrincipalName, identities")
    .GetAsync();

2. 从Identities中提取目标用户名

identities是一个数组,包含用户的所有身份提供商信息。对于以用户名作为ID的本地账户,找到signInType为userName的条目,issuerAssignedId就是你要的纯用户名(比如test123)。示例解析代码:

var userName = currentUser.Identities
    ?.FirstOrDefault(id => id.SignInType == "userName")
    ?.IssuerAssignedId;

3. 再次验证权限配置

确保你的应用注册已添加委派权限:

  • User.Read(允许读取当前登录用户的信息)
  • 已完成管理员同意(多租户或需访问其他用户信息场景需确认)

额外说明

Azure AD B2C的本地账户体系中,userPrincipalName是系统内部标识用的格式,不要依赖它获取用户自定义的登录名,identities才是正确的数据源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:25:22