使用 Azure CLI 发出 Microsoft Entra 令牌 并调用 Azure DevOps REST API。 由于 Entra 访问令牌仅持续一小时,因此它们非常适合快速的一次性操作。 可以使用 Azure CLI 为自己或代表 服务主体获取用户令牌。
先决条件
类别 |
要求 |
Entra 租户和订阅 |
请确保订阅与连接到要访问的 Azure DevOps 组织的租户相关联。 如果不知道租户或订阅 ID,可以在 Azure 门户中找到它。 |
Azure CLI |
下载并安装 Azure CLI。 |
Entra 应用 |
(如果对服务主体进行身份验证)创建 Entra 应用程序,并准备好应用客户端 ID 和客户端密码。 |
为自己获取 Entra 令牌
使用 az login
命令登录到 Azure CLI,并按照屏幕上的说明进行操作。
使用这些 bash 命令为登录用户设置正确的订阅。 请确保 Azure 订阅 ID 与连接到你尝试访问的 Azure DevOps 组织的租户相关联。 如果不知道订阅 ID,可以在 Azure 门户中找到它。
az account set -s <subscription-id>
使用 Azure DevOps 资源 ID az account get-access-token
通过 499b84ac-1321-427f-aa17-267ca6975798
命令生成 Microsoft Entra ID 访问令牌。
az account get-access-token \
--resource 499b84ac-1321-427f-aa17-267ca6975798 \
--query "accessToken" \
-o tsv
使用 Connect-AzAccount
命令登录到 Azure PowerShell,并按照屏幕上的说明进行作。
使用这些 PowerShell 命令为登录用户设置正确的订阅。 请确保 Azure 订阅 ID 与连接到你尝试访问的 Azure DevOps 组织的租户相关联。 如果不知道订阅 ID,可以在 Azure 门户中找到它。
Set-AzContext -Subscription <subscriptionID>
使用 Azure DevOps 资源 ID Get-AzAccessToken
通过 499b84ac-1321-427f-aa17-267ca6975798
命令生成 Microsoft Entra ID 访问令牌。
Get-AzAccessToken -ResourceUrl '499b84ac-1321-427f-aa17-267ca6975798'
获取服务主体的令牌
- 使用
az devops login
命令以服务主体身份登录到 Azure CLI。
- 按照屏幕上的说明完成登录。
# To authenticate a service principal with a password or cert:
az login --service-principal -u <app-id> -p <password-or-cert> --tenant <tenant>
# To authenticate a managed identity:
az login --identity
- 输入以下命令,为已登录服务主体设置正确的订阅:
az account set -s <subscription-id>
- 使用
az account get-access-token
Azure DevOps 资源 ID 生成Microsoft Entra ID 访问令牌: 499b84ac-1321-427f-aa17-267ca6975798
$accessToken = az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query "accessToken" --output tsv
注释
使用 Azure DevOps 应用程序 ID(而不是资源 URI)生成令牌。
- 现在,可以按常规使用
az cli
命令。 让我们尝试通过将 `Bearer
` 令牌传入标头来调用 Azure DevOps API:
$apiVersion = "7.1-preview.1"
$uri = "https://dev.azure.com/${yourOrgname}/_apis/projects?api-version=${apiVersion}"
$headers = @{
Accept = "application/json"
Authorization = "Bearer $accessToken"
}
Invoke-RestMethod -Uri $uri -Headers $headers -Method Get | Select-Object -ExpandProperty value ` | Select-Object id, name