使用MS Graph获取用户OnPremisesSamAccountName始终为空的问题
问题分析与解决方案
核心原因
你遇到的问题本质是委托权限下的属性读取限制或请求未显式指定目标属性导致的:仅当前登录用户能返回OnPremisesSamAccountName,是因为默认用户读取权限仅对自身开放完整属性,其他用户的该属性需要特定委托权限+显式请求才能获取。
无需应用权限的解决步骤
1. 确认并添加正确的委托权限
确保你的应用已申请并获得User.Read.All(委托权限),而非仅User.Read。这个权限允许登录用户读取目录中所有用户的基本属性(包括OnPremisesSamAccountName),属于用户级委托权限,相比应用权限更安全,不会授予应用独立访问目录的权限。
2. 显式指定要返回的属性
调用MS Graph API时,必须通过$select参数明确指定要获取的属性,否则Graph仅返回默认基础属性集(不含OnPremisesSamAccountName)。示例请求:
GET https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'{前缀}')&$select=displayName,OnPremisesSamAccountName
3. 检查租户的用户权限设置
如果上述两步仍无效,联系租户管理员确认Azure AD的用户权限配置:
- 进入Azure AD控制台 → 用户设置 → 用户权限
- 确保普通用户可以读取目录中的其他用户的配置文件选项处于启用状态
- 部分租户会限制普通用户的目录读取范围,开启该选项后,用户即可通过User.Read.All权限读取其他用户的完整基本属性
验证方法
用Graph Explorer登录测试账号,执行上述带$select的请求:
- 如果请求成功返回目标属性,说明代码中需要调整请求参数
- 如果仍返回空值,检查权限是否已正确授予,或联系管理员调整租户设置
内容的提问来源于stack exchange,提问作者Taher Tarek
相关产品推荐
相关产品推荐

