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

如何使用托管身份(MI)认证Azure DevOps并运行az命令?

解决托管身份令牌无法认证Azure DevOps CLI的问题

问题核心

使用Linux自托管VM的用户分配托管身份(MI)获取的令牌,替代PAT设置AZURE_DEVOPS_EXT_PAT或通过管道传递给az devops login时,报错Failed to authenticate using the supplied token,无法执行az devops/az repos命令。

根本原因

获取令牌时指定的--resource参数错误:之前使用MI的client_id作为资源标识,拿到的是针对托管身份自身的令牌,而非Azure DevOps服务认可的令牌。Azure DevOps有固定的资源ID,必须针对该ID请求令牌才能被ADO验证通过。

解决方案

1. 获取正确的Azure DevOps令牌

使用Azure CLI获取针对ADO固定资源ID的托管身份令牌:

# Azure DevOps的固定资源ID为499b84ac-1321-427f-aa17-267ca6975798
$accessToken = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" --query "accessToken" --output tsv

2. 两种认证方式

方式一:通过环境变量认证

设置AZURE_DEVOPS_EXT_PAT环境变量后直接执行命令:

$env:AZURE_DEVOPS_EXT_PAT = $accessToken
# 示例:列出组织下的项目
az devops project list --organization https://dev.azure.com/你的组织名

方式二:通过管道传递令牌登录

Write-Output $accessToken | az devops login --organization https://dev.azure.com/你的组织名
# 登录后即可执行后续命令,比如
az repos list --project 你的项目名

额外验证点

  • 确认托管身份已被添加为Azure DevOps组织用户,且拥有目标项目的管理员权限
  • 确认VM已通过az login --identity完成托管身份的Azure认证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:20:10