Azure DevOps身份选择器API调用401问题及替代方案咨询
解决Azure DevOps身份字段搜索API的问题
一、未文档化的IdentityPicker API返回401的原因
- 这个
IdentityPicker/IdentitiesAPI是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
相关产品推荐
相关产品推荐

