使用Bruno生成Azure Management API的OAuth2令牌时受众(AUDIENCE)错误
问题
我正在开发监控Azure资产的工具,用Bruno测试Azure Management API请求时遇到了问题:API需要有效的OAuth令牌,我在Bruno集合的令牌生成面板配置了所有必要参数,但生成的令牌**受众(AUDIENCE)**不符合要求。点击「Get Access Token」后流程看似正常,但令牌受众不对。而用Postman通过预请求脚本配置完全相同的参数,却能生成受众正确的令牌,Postman的预请求脚本如下:
const echoPostRequest = { url: 'https://login.microsoftonline.com/***/oauth2/token', method: 'POST', body: { mode: 'formdata', formdata: [ {key: "client_id", value:"***"}, {key: "client_secret", value:"***"}, {key: "resource", value:"https://management.azure.com/"}, {key: "grant_type", value:"client_credentials"} ] } };
解决办法
- 检查Bruno令牌面板的资源参数:Bruno的OAuth配置面板中,client credentials模式下要确保**resource(资源)**字段填写的是
https://management.azure.com/。部分版本的Bruno可能混淆了「受众」和「资源」字段,或是默认填充了Graph API的地址,直接修正该参数即可。 - 改用Bruno预请求脚本:如果面板配置始终有问题,直接模拟Postman的逻辑编写Bruno预请求脚本,手动获取令牌:
之后在API请求的Authorization头中引用该变量:// Bruno预请求脚本示例 const res = await fetch('https://login.microsoftonline.com/***/oauth2/token', { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: new URLSearchParams({ client_id: '***', client_secret: '***', resource: 'https://management.azure.com/', grant_type: 'client_credentials' }) }); const tokenData = await res.json(); bruno.setEnvVar('AZURE_TOKEN', tokenData.access_token);Bearer {{AZURE_TOKEN}} - 验证令牌内容:生成令牌后,用本地JWT解析工具(如jwt.io,无需上传令牌)检查
aud字段是否为https://management.azure.com/,确认是否是Bruno面板默认替换了资源参数。 - 升级Bruno版本:旧版Bruno对Azure AD的client credentials流程可能存在支持缺陷,尝试升级到最新版本后再测试。
内容的提问来源于stack exchange,提问作者Chris Hammond
相关产品推荐
相关产品推荐

