Postman请求Azure资源列表接口返回401未授权如何排查
Azure ARM接口client_credentials流调用401排查步骤
按优先级从高到低逐一排查:
- 第一优先级:校验访问令牌的受众(aud)是否正确
这是最常见的错误原因。client_credentials流获取令牌时,必须指定目标资源为Azure资源管理器的端点:全局Azure环境下v2端点的scope参数要填https://management.azure.com/.default,v1端点的resource参数要填https://management.azure.com/。
拿到令牌后可以直接解码JWT payload,检查aud字段值是否为https://management.azure.com,如果是其他值(比如Graph API的https://graph.microsoft.com),令牌会被ARM直接拒绝,返回401。 - 第二优先级:确认服务主体已被授予对应作用域的RBAC权限
你个人账号对资源有所有者权限,不代表你注册的应用(对应服务主体)自动继承权限。需要手动到目标订阅/资源组的「访问控制(IAM)」页面,给该应用对应的服务主体分配角色(比如读者、参与者、所有者均可),分配后等待1-5分钟让权限生效后再测试。
注意:不要把应用注册页面里配置的「API权限」和Azure RBAC权限混淆,调用ARM接口做资源查询时,RBAC角色分配是必须的,仅配置API权限无法通过授权校验。 - 第三优先级:校验云环境端点是否匹配
如果你用的是Azure主权云(比如中国区由世纪互联运营的Azure、美国政府云),不能使用全局的management.azure.com端点,需要替换为对应云环境的ARM域名,同时获取令牌的login端点、令牌的aud值也要同步替换为对应云环境的地址,环境不匹配会直接返回401。 - 第四优先级:检查请求头格式
发起请求时Authorization头必须严格遵循Bearer <access_token>格式,Bearer和令牌之间保留单个空格,不要出现令牌截断、多余换行、拼写错误(比如把Bearer拼错)的问题。
验证参考
全局Azure环境下,正确的client_credentials流获取令牌请求示例:
POST https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded client_id={应用客户端ID} &scope=https://management.azure.com/.default &client_secret={应用客户端密钥} &grant_type=client_credentials
拿到有效令牌后,再携带该令牌调用你之前的资源列表查询接口即可。
内容的提问来源于stack exchange,提问作者Vithika_312
相关产品推荐
相关产品推荐

