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

如何通过Entra应用注册使用OAuth2调用Azure DevOps API?

解决方案:用Entra应用注册认证调用Azure DevOps REST API

一、选对认证方式:服务主体(客户端凭证流程)

你要以应用身份自动化操作,后续迁到Azure Function,完全不用纠结需要回调URL的用户授权OAuth2流程。直接用服务主体认证(客户端凭证流程),无用户交互,适配脚本和服务端自动化场景。

二、Entra应用注册配置

  • 在Entra ID里创建单租户应用注册(匹配你关联Azure DevOps的租户)
  • 生成客户端密码(或用证书,证书更安全),务必保存好密码值(仅显示一次)
  • 在Azure DevOps组织中,将该应用注册的名称添加为用户,分配对应权限:比如创建项目需Project Collection Administrator权限,添加用户需对应用户管理权限

三、PowerShell中用服务主体调用API

1. 获取Azure DevOps访问令牌

$tenantId = "你的租户ID"
$clientId = "应用注册的客户端ID"
$clientSecret = "生成的客户端密码"
# Azure DevOps固定资源ID
$resource = "499b84ac-1321-427f-aa17-267ca6975798"

$tokenUri = "https://login.microsoftonline.com/$tenantId/oauth2/token"
$body = @{
    grant_type    = "client_credentials"
    client_id     = $clientId
    client_secret = $clientSecret
    resource      = $resource
}

$tokenResponse = Invoke-RestMethod -Uri $tokenUri -Method Post -Body $body -ContentType "application/x-www-form-urlencoded"
$accessToken = $tokenResponse.access_token

2. 调用API执行操作(示例:创建新项目)

$orgName = "你的Azure DevOps组织名"
$apiUrl = "https://dev.azure.com/$orgName/_apis/projects?api-version=7.1-preview.4"

# 构造项目请求体,可按需修改模板类型、版本控制类型
$projectBody = @{
    name = "自动化测试项目"
    description = "PowerShell自动创建的项目"
    capabilities = @{
        versioncontrol = @{
            sourceControlType = "Git"
        }
        processTemplate = @{
            # Scrum模板ID,如需其他模板可替换对应ID
            templateTypeId = "6b724908-ef14-45cf-84f8-768b5384da45"
        }
    }
} | ConvertTo-Json -Depth 10

Invoke-RestMethod -Uri $apiUrl -Method Post -Headers @{Authorization = "Bearer $accessToken"} -Body $projectBody -ContentType "application/json"

四、关于回调URL的澄清

你之前看的OAuth2流程是用户授权码流程,需要用户手动登录授权,因此才需要回调URL接收授权码。但你的场景用服务主体认证,完全不需要这套机制,不用关注回调、重定向URI这类内容。

五、Azure DevOps组织OAuth2配置的说明

你看到的Azure DevOps组织内的OAuth2配置,是给用户用第三方账号(比如Github、Bitbucket)登录Azure DevOps用的,和你用Entra应用注册认证完全无关,直接忽略即可。

六、迁移到Azure Function的注意事项

  • 优先用托管身份代替客户端密码,安全性更高:给Azure Function分配系统托管身份或用户托管身份,然后在Azure DevOps组织中将该托管身份添加为用户并分配权限
  • 用托管身份获取令牌的PowerShell代码示例:
# 获取Azure DevOps的访问令牌
$accessToken = (Invoke-RestMethod -Uri "http://localhost:50342/MSI/token?resource=499b84ac-1321-427f-aa17-267ca6975798&api-version=2019-08-01" -Headers @{Metadata="true"}).access_token

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:06:08