使用Postman生成Azure委托权限令牌遇授权拒绝问题求助
Azure令牌无Scope导致API授权失败解决方案
问题概述
通过Postman调用Azure令牌接口生成令牌后,用于API请求时收到错误:
"Authorization denied for this request"
经JWT.io验证,生成的令牌中无任何scope声明,且当前需使用委托权限(delegated permission)。
原请求配置:
- Endpoint:
https://login.microsoftonline.com/:tenant_id/oauth2/token - 请求方法:POST
- Header:
Content-Type: application/x-www-form-urlencoded - Body(Form-data):
grant_type:client_credentials client_id:你的Azure应用ID client_secret:你的Azure应用密钥 resource:目标API的URL
原因分析
你使用的client_credentials是客户端凭据流,属于应用权限(application permission)范畴:
- 该流无需用户参与,仅代表应用本身获取权限
- 令牌中不会包含
scope声明,若配置了应用权限则会返回roles声明 - 与你需要的**委托权限(代表用户获取权限)**完全不兼容,因此API拒绝授权
解决步骤
要获取包含委托权限scope的令牌,需切换到授权码流(Authorization Code Flow)(推荐,安全性更高),配置如下:
1. 配置授权码获取请求
- Endpoint:
https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize - 请求方法:GET
- Query参数:
client_id: 你的Azure应用注册IDresponse_type:code(固定值)redirect_uri: 需与Azure应用注册中"身份验证"选项卡配置的重定向URI一致(推荐用Postman自带的https://oauth.pstmn.io/v1/callback)scope: 你需要的委托权限完整值(例如https://graph.microsoft.com/User.Read,需对应目标API的权限)response_mode:query(固定值)
发送请求后,会跳转到Azure登录页面,完成用户登录后,URL中会返回code参数,这就是授权码。
2. 用授权码换取访问令牌
- Endpoint:
https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token - 请求方法:POST
- Header:
Content-Type: application/x-www-form-urlencoded - Body(x-www-form-urlencoded格式):
grant_type:authorization_code client_id:你的Azure应用注册ID client_secret:你的Azure应用密钥(若为机密客户端需填写) code:步骤1中获取的授权码 redirect_uri:与步骤1一致的重定向URI scope:与步骤1一致的委托权限scope
3. 验证与权限检查
- 获取令牌后,用JWT.io解析,确认令牌中包含
scp声明(对应你配置的委托权限) - 确保Azure应用注册中已添加目标API的委托权限,且已完成管理员同意(部分权限需要)
内容的提问来源于stack exchange,提问作者Sujit
相关产品推荐
相关产品推荐

