我在发布管道中有一个 Azure CLI 任务,我想从同一项目进行 API 调用。该任务在服务主体下执行,并且它为脚本提供
servicePrincipalId
、servicePrincipalKey
和 tenantId
。
如何使用服务主体的凭据来验证
Invoke-RestMethod
API 请求?
考虑到您使用
azure cli task
和 service principal
,我猜您的服务主体用于创建服务连接。我说得对吗?
如果我的猜测正确【如果不对,请忽略我的回答-_-】,你不需要获取服务主体的实际值,而是直接获取token,然后使用token发送
Invoke-RestMethod
请求。 az 帐户获取访问令牌
下面是说明案例的示例(获取 azure 订阅):
pool:
vmImage: windows-latest
steps:
- task: AzureCLI@2
displayName: 'Azure CLI'
inputs:
scriptType: ps
scriptLocation: inlineScript
azureSubscription: 'DevOpsSub1Connection-Test'
inlineScript: |
$subscriptionId = 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxx'
$token = $(az account get-access-token --resource-type arm --query accessToken --output tsv)
$headers = @{
"Content-Type" = "application/json"
"Authorization" = "Bearer " + $token
}
$uri = "https://management.azure.com/subscriptions/{0}?api-version=2022-12-01" -f $subscriptionId
$response = Invoke-RestMethod -Method Get -Uri $uri -Headers $headers
$response | ConvertTo-Json -Depth 10