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

如何通过Azure应用访问Azure DevOps API?令牌无效问题求助

问题分析与解决方案

你的核心问题在于访问令牌的受众(Audience)不匹配,以及权限范围(Scope)设置错误,导致令牌无法被目标API(Graph、Azure DevOps)识别。以下是针对性的修复步骤:

问题根源

你使用了CLIENT_ID/.default作为scope,这个范围会让生成的令牌受众指向你的应用本身,而非Azure DevOps或Graph API。而每个API只接受受众为自身的令牌,因此出现Invalid audience错误或被重定向到登录页。


正确获取可用令牌的步骤

1. 重新获取授权码(调整Scope)

访问授权端点时,替换scope为目标API所需的委托权限:

https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?client_id=CLIENT_ID&response_type=code&prompt=select_account&scope=https://dev.azure.com/user_impersonation User.Read&redirect_uri=https://foo.bar.com/auth
  • https://dev.azure.com/user_impersonation:Azure DevOps的用户模拟权限,用于调用其API
  • User.Read:Graph API的用户信息读取权限
  • 多个权限用空格分隔(URL编码后为%20,实际请求需确保编码正确)

2. 交换访问令牌(保持Scope一致)

向https://login.microsoftonline.com/organizations/oauth2/v2.0/token发起POST请求,参数调整为:

grant_type:authorization_code
client_id:CLIENT_ID
client_secret:SECRET
scope:https://dev.azure.com/user_impersonation User.Read
redirect_uri:https://foo.bar.com/auth
code:CODE

注意:此处scope必须与授权请求时完全一致,否则令牌权限会不匹配。

3. 验证令牌有效性

获取access_token后,可通过本地解码(如JWT.io)查看aud声明:

  • 调用Azure DevOps API的令牌,aud应为https://dev.azure.com
  • 调用Graph API的令牌,aud应为https://graph.microsoft.com

关于On-Behalf-Of模式的修正

你之前的OBO模式使用错误:

  • OBO模式需要的是用户的访问令牌作为assertion参数,而非授权码(CODE)
  • scope需指定目标API的权限(如https://dev.azure.com/user_impersonation),而非自己应用的.default

Git Clone的令牌使用

对于Azure DevOps Git仓库克隆:

  • 用户名可留空或填写任意值
  • 密码使用获取到的、受众为https://dev.azure.com的访问令牌
  • 确保令牌包含vso.code_read(只读)或vso.code_write(读写)权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:05:09