多租户Azure应用已授权Graph权限,按无用户访问流程生成令牌后如何访问资源?
如何通过无用户模式访问Microsoft Graph资源
看起来你已经走完了权限配置和令牌生成的关键流程,接下来可以按以下步骤正确调用Graph API:
1. 先确认令牌的有效性(重中之重)
因为你用的是无用户的客户端凭据模式,所以在jwt.ms里查看令牌时,重点关注这两个细节:
- 检查
roles声明:里面必须包含你授予的应用权限,比如User.Read.All、Device.Read.All这类(注意是应用权限,不是委托权限对应的scp声明)。如果没有这个字段或者缺少对应权限,说明权限授予没生效,得回去排查:- 确认你添加的是应用权限(不是委托权限)——客户端凭据模式只能使用应用权限
- 确认点击「授予权限」的账号是全局管理员或拥有应用权限授予权限的管理员
- 权限授予后可能需要几分钟才能生效,别着急立刻测试
2. 构建Graph API请求
拿到有效令牌后,就可以发起请求了:
- 选择对应的Graph API端点:比如读取所有用户用
GET https://graph.microsoft.com/v1.0/users,读取设备用GET https://graph.microsoft.com/v1.0/devices,具体端点可参考Graph官方文档的资源路径 - 设置请求头:必须包含
Authorization字段,格式为Bearer {你的访问令牌}(注意Bearer后面有个空格) - 举个curl命令的测试例子:
你也可以用Postman、PowerShell或者熟悉的编程语言发起请求,核心逻辑都是一致的。curl -X GET "https://graph.microsoft.com/v1.0/users" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json"
3. 处理响应与排查问题
- 请求成功的话,会返回对应的JSON数据(比如用户列表、设备列表)
- 如果遇到
403 Forbidden:- 先检查令牌里的
roles是否包含所需权限 - 确认权限已经被管理员授予(多租户环境下可能需要针对目标租户单独授予权限)
- 先检查令牌里的
- 如果遇到
401 Unauthorized:- 检查令牌是否过期(看令牌里的
exp字段) - 确认生成令牌时用的客户端ID、租户ID、客户端密钥/证书是否正确
- 检查令牌是否过期(看令牌里的
- 如果遇到
404 Not Found:检查API端点路径是否正确,比如有没有写错版本(v1.0和beta的路径有区别)
额外注意事项
- 多租户应用如果要访问其他租户的资源,需要目标租户的管理员同意你的应用权限,或者生成令牌时指定目标租户的ID
- 遵循最小权限原则:虽然你分配了几乎所有读取权限,但实际开发建议只授予业务需要的权限,降低不必要的风险
内容的提问来源于stack exchange,提问作者Batman22
相关产品推荐
相关产品推荐

