我正在使用 Linux 自托管 VM 代理,并安装了相关工具来运行 PowerShell 和 Az 命令。
我想使用托管身份中的访问令牌而不是使用个人访问令牌对 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 命令起作用。我该如何解决它?
嗯,您已经知道了:我建议首先测试 ADO REST API,然后根据需要返回 CLI 扩展。
他们将所有令牌包装为基本身份验证: azure-devops-cli-extension/azure-devops/azext_devops/dev/common
以及具有类似代码结构的代码的其他部分。
要验证 OAuth 令牌,您需要使用 CLI 扩展(据我所知)不支持的承载令牌:使用 OAuth 2.0 授权对 REST API 的访问,4. 使用访问令牌
扩展认证部分的质量非常低,开发扩展的团队反应迟钝。因此,我建议通过官方付费渠道创建支持票。