Azure DevOps API授权失败:TF400813权限问题求助
排查TF400813权限错误的可能原因
服务主体未在Azure DevOps组织中分配权限
完成应用注册后,必须在Azure DevOps组织内给对应的服务主体添加成员身份并分配权限:- 进入Azure DevOps组织的「组织设置」->「安全性」->「用户」
- 搜索服务主体的名称或客户端ID,添加为组织成员
- 给该服务主体分配至少项目读者角色(读取项目列表足够),如需更多操作则分配对应角色
Token权限范围缺失或未授权
确保获取Token时配置了正确的Azure DevOps权限:- 在应用注册的「API权限」中添加Azure DevOps的权限(比如
vso.project_read) - 必须点击「授予管理员同意」,否则服务主体无法获取到有权限的Token
- 客户端凭证流获取Token时,scope需指定为
https://app.vssps.visualstudio.com/.default
- 在应用注册的「API权限」中添加Azure DevOps的权限(比如
Token的受众/资源ID错误
获取Token时,目标资源必须指定为Azure DevOps的专属资源ID:499b84ac-1321-427f-aa17-267ca6975798,否则Token无法被Azure DevOps验证通过。过时示例代码的认证方式问题
4年前的.NET示例可能使用了已废弃的ADAL库,建议替换为MSAL库(Microsoft.Identity.Client),并按照当前客户端凭证流的正确方式实现认证:var clientId = "你的应用客户端ID"; var clientSecret = "你的应用客户端密钥"; var tenantId = "你的租户ID"; var resourceId = "499b84ac-1321-427f-aa17-267ca6975798"; var app = ConfidentialClientApplicationBuilder .Create(clientId) .WithClientSecret(clientSecret) .WithTenantId(tenantId) .Build(); var result = await app.AcquireTokenForClient(new[] { $"{resourceId}/.default" }) .ExecuteAsync();Azure DevOps组织外部访问限制
检查组织设置的「安全性」->「外部访问」,确认是否允许Microsoft Entra ID中的应用访问该组织,默认应该开启,但如果被关闭会导致服务主体无法访问。
内容的提问来源于stack exchange,提问作者Chris J
相关产品推荐
相关产品推荐

