如何通过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的用户模拟权限,用于调用其APIUser.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
相关产品推荐
相关产品推荐

