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

使用Azure AD服务主体实现无代理发布管道调用Azure DevOps API的认证问题

问题解答

微软是否支持用服务主体认证Azure DevOps API?

支持,但你选的服务连接类型不对。Azure Resource Manager服务连接是用来访问Azure云资源(比如VM、存储)的,和Azure DevOps API的认证逻辑不兼容。要认证Azure DevOps API,得用Azure Active Directory类型的服务连接,基于AAD服务主体授权。

错误信息翻译

azure devops {"error":{"code":"MissingSubscription","message":"请求缺少订阅或有效的租户级资源提供程序。"}} 异常信息:

正确的实现步骤

  • 在Azure AD中注册服务主体:
    • 登录Azure门户,进入「Azure Active Directory」→「应用注册」→「新建注册」。
    • 记下客户端ID(即你的Service Principal ID)、客户端密钥,以及租户ID。
  • 给服务主体分配Azure DevOps权限:
    • 在Azure AD的应用注册页面,进入「API权限」→「添加权限」→ 搜索并选择「Azure DevOps」。
    • 勾选你需要的权限(比如Build.ReadWrite.All、Release.ReadWrite.All),然后完成管理员同意(需AAD管理员操作)。
  • 在Azure DevOps中创建正确的服务连接:
    • 进入项目设置→「服务连接」→「新建服务连接」,选择「Azure Active Directory」类型。
    • 填入租户ID、客户端ID、客户端密钥,命名后保存。
  • 在无代理管道中调用API:
    • 用PowerShell或Azure CLI获取访问令牌(Azure DevOps的固定资源ID是499b84ac-1321-427f-aa17-267ca6975798):
      $token = (Get-AzAccessToken -ResourceUrl "499b84ac-1321-427f-aa17-267ca6975798" -ServicePrincipal).Token
      
    • 带上令牌调用API:
      $headers = @{
          "Authorization" = "Bearer $token"
          "Content-Type" = "application/json"
      }
      Invoke-RestMethod -Uri "https://dev.azure.com/myorg/_apis/pipelines?api-version=7.1-preview.1" -Headers $headers
      

失败原因分析

你用了Azure Resource Manager服务连接,它的认证逻辑默认要求关联Azure订阅,但Azure DevOps API不需要订阅信息,所以触发了MissingSubscription错误。换用Azure AD类型的服务连接就能解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:17:12