如何为Azure API生成Bearer Token?OAuth2获取的Token调用API报错401
问题背景
你已通过Az CLI获取到可用的Bearer Token,但使用Microsoft OAuth2 API POST请求获取的Token调用Azure DevOps仓库接口 https://dev.azure.com/{organization}/{project}/_apis/git/repositories?api-version=7.0 时,返回401 Unauthorized错误,错误信息:
TF401444: 请至少以 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 身份在网页浏览器中登录一次,以启用对服务的访问权限。
原因分析
这个错误的核心是:你用来获取Token的身份(通常是服务主体)尚未在目标Azure DevOps组织中完成首次交互式验证,或者该身份未被分配访问该组织/项目的必要权限。
解决步骤
完成首次交互式登录
用错误信息中指定的身份,在浏览器中访问你的Azure DevOps组织地址https://dev.azure.com/{你的组织},按照页面提示完成登录授权。这一步会在Azure DevOps系统中注册该身份,激活其服务访问权限。确认Token的权限范围
检查你请求OAuth2 Token时的scope参数:- 如果使用客户端凭证流(Client Credentials Flow),需指定
scope=https://dev.azure.com/.default; - 如果使用授权码流(Authorization Code Flow),需包含
vso.code_read等对应接口所需的权限(比如读取仓库需要vso.code_read)。错误的权限范围会导致Token无法通过接口校验。
- 如果使用客户端凭证流(Client Credentials Flow),需指定
检查Azure DevOps权限配置
登录Azure DevOps组织,进入对应项目的「项目设置」→「权限」,确认该身份(服务主体)已被添加到项目或组织的权限组中,并且拥有「读取仓库」等必要操作权限。验证Token有效性
可以将获取到的Token复制到https://jwt.ms解析,检查:aud字段是否为https://dev.azure.com(确保Token受众正确);scp(委托权限)或roles(应用权限)字段是否包含所需的权限标识。
内容的提问来源于stack exchange,提问作者Titouan Ferdoel

