You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DevOps流水线中通过服务主体授权API调用并认证Invoke-RestMethod请求

利用服务主体凭据对Invoke-RestMethod请求进行身份认证

核心思路

先通过服务主体的servicePrincipalId、servicePrincipalKey和tenantId获取Azure AD访问令牌,再将令牌作为Authorization请求头的一部分,传递给目标API调用。

具体实现步骤

1. 获取Azure AD访问令牌

使用PowerShell调用Azure AD令牌端点,获取针对目标API的访问令牌(以Azure DevOps API为例):

# 读取流水线中注入的服务主体参数
$servicePrincipalId = "$(servicePrincipalId)"
$servicePrincipalKey = "$(servicePrincipalKey)"
$tenantId = "$(tenantId)"
# 目标API的受众标识,Azure DevOps固定为https://dev.azure.com/
$resource = "https://dev.azure.com/"

# 构造令牌请求参数
$tokenRequestBody = @{
    grant_type    = "client_credentials"
    client_id     = $servicePrincipalId
    client_secret = $servicePrincipalKey
    resource      = $resource
}

# 发送请求获取访问令牌
$tokenResult = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantId/oauth2/token" -Method Post -Body $tokenRequestBody
$accessToken = $tokenResult.access_token

2. 携带令牌调用目标API

将获取到的令牌放入请求头,发起API调用(示例为查询项目基本信息):

# 替换为实际的组织和项目名称
$orgName = "你的组织名称"
$projectName = "你的目标项目名称"

# 构造API请求头
$apiHeaders = @{
    "Authorization" = "Bearer $accessToken"
    "Content-Type"  = "application/json"
}

# 调用Azure DevOps项目信息API
$apiUrl = "https://dev.azure.com/$orgName/$projectName/_apis/projects?api-version=7.1-preview.4"
$apiResponse = Invoke-RestMethod -Uri $apiUrl -Method Get -Headers $apiHeaders

# 输出响应结果
$apiResponse | ConvertTo-Json -Depth 10

注意事项

  • 需确保服务主体已被授予目标Azure DevOps项目的对应权限,可在组织设置中为服务主体分配项目级角色。
  • 如果调用的是其他Azure服务API,只需修改$resource的值为对应服务的受众URL(例如Azure管理API为https://management.azure.com/)。

内容的提问来源于stack exchange,提问作者end-user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:14:57