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

Azure REST API 管理员请求返回200,其他用户返回203问题排查

问题原因分析与解决方案

从你的描述和代码来看,返回203状态码的问题主要来自两个核心点:

1. 认证方式与OAuth令牌不匹配

你提到是通过OAuth获取的令牌,但代码里却错误使用了Basic认证方案来传递令牌。Azure DevOps的OAuth 2.0令牌需要使用Bearer认证方案,而不是Basic——Basic认证是专门用于传递个人访问令牌(PAT)的方式(格式为空用户名+PAT转Base64),但OAuth返回的access token必须放在Authorization: Bearer <token>请求头中。

2. OAuth令牌的权限范围不足

即使修正了认证方式,普通用户的OAuth令牌如果没有请求足够的权限范围,也会返回203。要读取项目列表,你的OAuth应用需要预先配置并请求vso.project_read这个权限范围,且用户在授权流程中同意了该权限。如果授权时未包含这个范围,普通用户的令牌就没有读取项目的权限,Azure DevOps会返回203表示请求成功但内容是非授权的。

修正后的代码示例

把认证方案改为Bearer,同时确保OAuth令牌已包含vso.project_read权限:

var oAuthAccessToken = token; // 这里是你通过OAuth获取的access token
using var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json"));
// 改用Bearer认证方案传递OAuth令牌
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", oAuthAccessToken);
using var response = await client.GetAsync(
    "https://dev.azure.com/{organization}/_apis/projects?api-version=2.0");
response.EnsureSuccessStatusCode();
var responseBody = await response.Content.ReadAsStringAsync();

额外验证步骤

  • 检查OAuth应用的权限配置,确保已添加vso.project_read权限(在Azure DevOps的应用注册页面配置)。
  • 让普通用户重新授权你的应用,确认授权流程中明确显示了"读取项目"相关的权限提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:27:43