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

问题描述 投票:0回答:1

我正在使用 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 文件并在
get-content
管道之前运行
az devops login

按照这里的详细信息,这应该可以以某种方式实现...... 使用 Azure Active Directory 服务主体和托管身份

我知道可以使用 ADO REST API 并将访问令牌放入 JSON 标头中以进行授权。但这将不允许 az 命令起作用。我该如何解决它?

azure azure-devops azure-cli azure-managed-identity personal-access-token
1个回答
0
投票

嗯,您已经知道了:我建议首先测试 ADO REST API,然后根据需要返回 CLI 扩展。


他们将所有令牌包装为基本身份验证: azure-devops-cli-extension/azure-devops/azext_devops/dev/common

以及具有类似代码结构的代码的其他部分。

要验证 OAuth 令牌,您需要使用 CLI 扩展(据我所知)不支持的承载令牌:使用 OAuth 2.0 授权对 REST API 的访问,4. 使用访问令牌


扩展认证部分的质量非常低,开发扩展的团队反应迟钝。因此,我建议通过官方付费渠道创建支持票。

© www.soinside.com 2019 - 2024. All rights reserved.