使用托管身份(MI)通过Azure DevOps进行身份验证

xoshrz7s  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(95)

我正在使用Linux自托管VM代理,并安装了相关工具来运行PowerShell和Az命令。

  • 此VM已添加用户分配的托管标识。
  • MI已作为用户添加到我的ADO组织中。
  • MI具有ADO项目的管理员权限。
  • 已针对VM运行Az登录,以便使用MI对Azure进行身份验证。

我希望使用托管身份中的访问令牌而不是使用个人访问令牌对Azure DevOps进行身份验证。在验证之后,我想使用az devops和az repos命令来自动控制ADO。
之前,我导出了一个变量$env:AZURE_DEVOPS_EXT_PAT并使用了我的PAT令牌,它工作得很好。但是,当使用相同的变量并将其指向MI的访问令牌变量时。失败了...
这是我当前的命令:

$accessToken = az account get-access-token --resource $mi_client_id --query "accessToken" --output tsv

$env:AZURE_DEVOPS_EXT_PAT = $accessToken

字符串
我也尝试过这些变化。

$accessToken = az account get-access-token --resource $mi_client_id --query "accessToken" --output tsv
write-host $accessToken | az devops login --organization $ado_org_name


我得到的错误是:

Failed to authenticate using the supplied token.


我还尝试通过将$accesstoken设置为不记名令牌来解决这个问题。它仍然是一样的。我尝试的另一种方法是将$accesstoken值输出到txt文件,并在az devops login管道之前运行get-content
下面的细节从这里,这应该是可以实现的某种方式形状或形式…Use Azure Active Directory service principals & managed identities
我知道可以使用ADO REST API,并将访问令牌放入JSON头中进行授权。但这将不允许az命令工作。我该怎么解决?

eqfvzcg8

eqfvzcg81#

你已经知道了我建议首先测试ADO REST API,然后根据需要返回CLI扩展。
它们将所有令牌 Package 为基本身份验证:azure-devops-cli-extension/azure-devops/azext_devops/dev/common
和具有类似代码构造的代码的其他部分。
要对OAuth令牌进行身份验证,您需要使用CLI扩展不支持的承载令牌(AFAIK):* 使用OAuth 2.0、4.使用访问令牌 *
扩展认证部分的质量非常低,开发扩展的团队React迟钝。因此,我建议通过官方付费渠道创建支持票。

相关问题