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

使用服务主体创建Azure DevOps的PAT时遇浏览器登录要求错误

解决Azure DevOps服务主体API调用报错:"sign-in at least once in a web browser to enable access to the service"

这个错误的核心原因是服务主体未被正确授权访问Azure DevOps组织,或相关策略限制了非交互式访问,以下是具体解决步骤:

1. 将服务主体添加到Azure DevOps组织并分配权限

  • 登录目标Azure DevOps组织,进入组织设置 -> 权限 -> 用户
  • 点击"添加用户",输入服务主体的应用ID(格式为{应用ID}@{租户ID})
  • 为其分配合适的角色(如项目管理员、读者等,根据API需求选择)

2. 检查Azure DevOps组织安全策略

  • 进入组织设置 -> 安全 -> 策略
  • 确认"允许服务主体访问"相关策略处于开启状态,避免组织限制非交互式登录

3. 修正OAuth令牌的权限范围与参数名

Azure DevOps的官方资源ID是499b84ac-1321-427f-aa17-267ca6975798,替换代码中错误的scope值,同时注意参数名的正确性(原代码中App_id/App_secret需改为标准的client_id/client_secret):

# Acquire OAuth Token from Azure AD
$tenantId = "你的租户ID"
$App_ID = "你的服务主体应用ID"
$App_Secret = "你的服务主体密钥"

$tokenResponse = Invoke-RestMethod -Method Post -Uri https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token -Body @{
    client_id = $App_ID
    scope = "499b84ac-1321-427f-aa17-267ca6975798/.default"
    client_secret = $App_Secret
    grant_type = "client_credentials"
}

# Use OAuth Token to Call Azure DevOps API
$apiUrl = "https://dev.azure.com/{organization}/{project}/_apis/{service}?api-version=7.1-preview.1"
$headers = @{
    Authorization = "Bearer " + $tokenResponse.access_token
}

$response = Invoke-RestMethod -Uri $apiUrl -Method Get -Headers $headers

4. 配置Azure AD服务主体的API权限

  • 登录Azure门户,进入Azure AD -> 应用注册 -> 找到你的服务主体
  • 进入API权限 -> 添加权限 -> 选择"Azure DevOps"
  • 添加应用权限(因为使用client_credentials流),如user_impersonation或对应服务的具体权限,最后点击"授予管理员同意"

完成以上步骤后,重新运行代码获取令牌并测试API调用,即可解决该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:30:56