GraphServiceClient获取Azure AD B2C用户时属性缺失问题求助
解决Azure AD B2C调用Graph API获取本地账户用户名的问题
核心问题分析
- Graph API默认返回的是精简版用户对象,
identities不属于默认返回字段,所以你拿到的是null,必须显式指定要获取该属性。 - 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
相关产品推荐
相关产品推荐

