使用 Azure CLI 發出 Microsoft Entra 令牌 ,並呼叫 Azure DevOps REST API。 由於 Entra 存取令牌僅持續一小時,因此非常適合快速的一次性作業。 您可以使用 Azure CLI 為自己或代表 服務主體取得使用者令牌。
先決條件
類別 |
需求 |
Entra 租用戶和訂用帳戶 |
請確定訂用帳戶與您嘗試存取的 Azure DevOps 組織連線的租使用者相關聯。 如果您不知道租用戶或訂用帳戶標識碼,您可以在 azure 入口網站 中找到該標識碼。 |
Azure CLI(命令列介面) |
下載並安裝 Azure CLI。 |
Entra 應用程式 |
(如果驗證服務主體)建立 Entra 應用程式,並備妥應用程式用戶端識別碼和客戶端密碼。 |
為自己取得 Entra 令牌
使用 az login
命令登入 Azure CLI,並遵循畫面上的指示。
使用這些bash命令,為登入的用戶設定正確的訂用帳戶。 請確認 Azure 訂閱識別碼與您嘗試存取的 Azure DevOps 組織所連線的租戶相關聯。 如果您不知道訂用帳戶標識碼,您可以在 azure 入口網站 中找到該標識碼。
az account set -s <subscription-id>
使用 Azure DevOps 資源識別碼 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 訂閱識別碼與您嘗試存取的 Azure DevOps 組織所連線的租戶相關聯。 如果您不知道訂用帳戶標識碼,您可以在 azure 入口網站 中找到該標識碼。
Set-AzContext -Subscription <subscriptionID>
使用 Azure DevOps 資源識別碼 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>
- 使用 Azure DevOps 資源識別碼
az account get-access-token
產生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 應用程式識別碼,而非我們的資源 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