使用Microsoft Graph API从Azure AD获取用户时权限不足问题排查
问题
我尝试通过Microsoft Graph API获取Azure AD中的用户列表,已成功生成如下格式的Bearer令牌:
{ "token_type": "Bearer", "expires_in": "3599", "ext_expires_in": "3599", "expires_on": "1689943771", "not_before": "1689939871", "resource": "https://graph.microsoft.com", "access_token": "<My token>" }
调用API接口 https://graph.microsoft.com/v1.0/users 后,收到如下错误响应:
{ "error": { "code": "Authorization_RequestDenied", "message": "Insufficient privileges to complete the operation.", "innerError": { "date": "2023-07-21T11:49:44", "request-id": "f6ba2d19-e8ec-4698-97cc-ad62c60931fa", "client-request-id": "f6ba2d19-e8ec-4698-97cc-ad62c60931fa" } } }
我已添加对应权限(见权限截图),请问还缺少什么配置?
可能的缺失配置
- 确认权限是否完成管理员同意:如果添加的是应用权限或者需要管理员同意的委托权限,必须由Azure AD全局管理员或对应权限的管理员完成「授予管理员同意」操作,仅添加权限不做同意,令牌里不会包含该权限。
- 检查权限类型是否匹配调用场景:
- 要是后台服务/守护程序调用(无用户上下文),必须加应用权限(比如
User.Read.All应用权限),不能用委托权限; - 要是有用户登录的场景,得确保添加的委托权限(比如
User.ReadBasic.All或User.Read.All)已被用户或管理员同意,且调用时的用户有足够权限查看对应用户列表。
- 要是后台服务/守护程序调用(无用户上下文),必须加应用权限(比如
- 验证令牌中的权限范围:用JWT解析工具(本地离线工具即可)查看
access_token的scp(委托权限)或roles(应用权限)字段,确认是否包含所需的权限(比如User.Read.All)。如果令牌里没有对应权限,说明权限没配置或同意到位。 - 确认权限范围是否足够:比如要读取所有用户,得用
User.Read.All权限,User.Read只能读当前用户信息,权限范围不够就会报错。 - 清除令牌缓存重新获取:如果之前获取过令牌,新添加的权限可能没同步,清缓存后重新生成令牌,确保新令牌包含最新配置的权限。
内容的提问来源于stack exchange,提问作者sai chandan
相关产品推荐
相关产品推荐

