如何使用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
相关产品推荐
相关产品推荐

