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

如何使用Azure Entra ID App Registrations替代Azure DevOps PAT?

替换Azure DevOps PAT为Entra ID应用注册联合凭证实现资源访问

1. 创建Entra ID应用注册

  • 登录Azure门户,进入Azure Entra ID → 应用注册 → 新注册
  • 填写应用名称,选择租户类型(按需选单/多租户),注册后留存客户端ID和租户ID

2. 给应用分配Azure DevOps权限

  • 打开你的Azure DevOps组织,进入项目设置 → 权限 → 用户
  • 添加用户时搜索刚创建的应用注册名称,选中后分配对应权限:
    • 仓库读写:分配「代码贡献者」角色
    • 流水线操作:分配「流水线管理员」或对应精细权限
    • 全权限需求可直接分配「项目集合管理员」

3. 配置联合凭证

  • 回到Entra ID应用注册页面,进入证书和密码 → 联合凭证 → 添加凭证
  • 选择颁发者类型:如果是自定义应用,选「其他颁发者」;如果运行在Azure服务(如VM/Function),选对应托管标识的颁发者
  • 填写凭证参数:
    • 颁发者URL:匹配你应用生成OIDC令牌的服务地址
    • 受众:填api://AzureDevOps或你的应用客户端ID
    • 主体标识符:填应用的唯一标识(如客户端ID,或应用JWT的sub字段值)
  • 保存凭证,记录这些参数供应用调用使用

4. 应用内实现令牌获取与API调用

  • 应用需通过OIDC流程获取Entra ID访问令牌,目标资源ID固定为499b84ac-1321-427f-aa17-267ca6975798(Azure DevOps的API资源ID)
  • 示例Python代码(用Azure Identity SDK):
from azure.identity import ClientSecretCredential
import requests

tenant_id = "你的租户ID"
client_id = "你的应用客户端ID"
# 若用联合凭证,无需客户端密码,传入应用生成的OIDC令牌
cred = ClientSecretCredential(tenant_id, client_id, client_secret=None, federated_token="应用生成的OIDC令牌")

# 获取Azure DevOps访问令牌
token = cred.get_token("499b84ac-1321-427f-aa17-267ca6975798/.default")

# 调用仓库API示例
api_url = "https://dev.azure.com/你的组织/项目名/_apis/git/repositories?api-version=7.1-preview.1"
headers = {"Authorization": f"Bearer {token.token}"}
resp = requests.get(api_url, headers=headers)
print(resp.json())

5. 权限验证

  • 运行应用测试仓库读写、流水线操作,若遇权限报错,回到Azure DevOps权限页调整应用的角色权限

关键提示:联合凭证的核心是应用生成的OIDC令牌必须与Entra ID中配置的颁发者、受众、主体完全匹配,否则无法通过验证。如果应用运行在第三方环境,需确保该环境的OIDC服务已被Entra ID信任。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:02:41