You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bruno OAuth2配置在Azure DevOps流水线及本地运行失败求助

问题排查与解决方案

1. 修正OAuth2 Scope配置(核心问题)

你的测试请求目标是https://my-app.com/api,但当前配置的scope是https://graph.microsoft.com/.default——这是Microsoft Graph API的权限范围,和你的目标API完全不匹配。在client_credentials模式下,scope必须是目标API的应用ID URI + /.default:

  • 登录Azure Portal,找到目标API对应的应用注册(或进入“暴露API”配置页面),获取其应用ID URI(示例:https://my-app-api-contoso.com)
  • 将auth:oauth2中的scope修改为:你的应用ID URI/.default,例如:
    scope: https://my-app-api-contoso.com/.default
    

2. 确认Azure Entra ID应用注册的权限配置

  • 确保用于获取token的应用注册,已被授予目标API的应用权限(而非委派权限),并且已点击授予管理员同意(client_credentials模式必须使用应用权限,且需完成管理员同意操作)
  • 检查应用注册的客户端密码(client_secret)是否有效:未过期、未被吊销,配置中输入的内容无额外空格或转义错误;若流水线使用变量注入,确认变量值正确传递

3. 修正Bruno脚本逻辑

你当前的script:post-response绑定在集合的API请求响应后执行,而非OAuth2 token获取请求的响应后。因此脚本中获取的res.body是测试API的401响应(空响应体),而非token接口的响应。调试与优化方式:

  • 使用Bruno CLI的--verbose参数运行测试,查看token请求的详细日志:
    br run --verbose
    
  • 移除当前集合中的script:post-response,client_credentials模式下Bruno会自动处理token的获取与附加,无需手动设置变量(默认会添加Authorization: Bearer <token>请求头)

4. 排查网络与环境问题

  • 本地非桌面端:确认Bruno CLI版本与桌面端一致,旧版本可能存在OAuth2 client_credentials模式的bug,可更新到最新版本:
    npm install -g @usebruno/cli
    
  • Azure DevOps流水线:检查代理是否允许访问Azure Entra ID的token端点,可在流水线中添加curl测试步骤验证:
    curl -X POST https://login.microsoftonline.com/你的租户ID/oauth2/v2.0/token \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -d "grant_type=client_credentials&client_id=你的客户端ID&client_secret=你的客户端密码&scope=你的目标API应用ID URI/.default"
    
    查看是否能正常返回包含access_token的响应,以此判断是否为网络或凭证问题。

5. 验证token有效性

若成功获取到token,可使用本地JWT解析工具解析token,确认:

  • aud(受众)字段匹配目标API的应用ID URI
  • roles字段包含目标API授予的应用权限

内容的提问来源于stack exchange,提问作者pyth0nEiken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:12:34