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

Azure DevOps身份选择器API调用401问题及替代方案咨询

解决Azure DevOps身份字段搜索API的问题

一、未文档化的IdentityPicker API返回401的原因

  • 这个IdentityPicker/Identities API是Azure DevOps网站内部使用的私有API,未正式对外开放。它依赖浏览器会话的上下文(如用户Cookie),而非单纯的OAuth令牌权限,即使配置了vso.identity权限,服务器端调用也无法通过身份验证,因此会返回401。微软不支持外部调用这类私有API,后续可能随时变更或禁用。

二、Read Identities API返回0结果的解决办法

你调用的vssps.dev.azure.com域名下的Read Identities API是公开的身份管理API,但返回空结果通常是因为搜索参数使用错误:

  • 搜索过滤器选择错误:searchFilter=DisplayName是精确匹配显示名,而非模糊搜索。如果要实现类似网站的模糊搜索效果,应该使用searchFilter=General,它会同时搜索用户的显示名、邮件地址、别名等字段。
  • 修正后的示例调用:
    https://vssps.dev.azure.com/MY_ORGANIZATION/_apis/identities?api-version=7.0&searchFilter=General&filterValue=SEARCH_TERM
    
  • 额外检查:确保搜索的用户确实属于当前Azure DevOps组织,且应用注册的vso.identity权限为应用权限而非委托权限,且已完成管理员同意。

三、两个域名的区别与令牌跨域问题

  • dev.azure.com:Azure DevOps项目集合服务域名,负责处理工作项、代码仓库、管道等项目级操作。
  • vssps.dev.azure.com:Azure DevOps身份管理服务(IMS)域名,负责组织级的身份、权限、应用注册等全局管理操作。
  • OAuth令牌跨域:只要你的令牌受众(Audience)是Azure DevOps的资源ID(499b84ac-1321-427f-aa17-267ca6975798),就可以同时访问这两个域名的API,只需确保令牌包含对应API所需的权限(比如访问IMS需要vso.identity)。

四、最佳替代方案

推荐使用工作项建议API,这是微软官方提供的、专门用于工作项字段搜索的公开API,和Azure DevOps网站的搜索体验完全一致:

  • 请求方式:POST
  • 地址:https://dev.azure.com/{organization}/{project}/_apis/wit/suggestions?api-version=7.0
  • 请求体示例:
    {
      "fieldName": "System.AssignedTo",
      "searchText": "SEARCH_TERM"
    }
    
  • 该API会直接返回符合搜索条件的用户/组列表,完美适配System.AssignedTo字段的需求,无需额外处理身份ID映射。

如果需要更通用的身份搜索,也可以使用:

  • Microsoft Graph API:调用/users端点搜索Entra ID中的用户,需要为应用注册添加User.Read.All权限,获取用户信息后再映射到Azure DevOps身份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:10:18