如何通过MS Graph或Azure REST API同时搜索用户、组、服务主体的名称和邮箱?
实现方案说明
Azure 门户的混合搜索效果是通过合并多组 MS Graph API 调用结果实现的,所用能力均为公开接口,你可以通过两种方案复现该效果:
方案1:调用 Microsoft Graph 统一搜索接口(推荐)
直接使用公开的 MS Graph 搜索端点,可一次请求同时匹配多类对象、多个字段:
- 请求头需指定
ConsistencyLevel: eventual - 请求体中可指定搜索实体为
user、group、servicePrincipal,同时指定匹配字段为displayName、mail、servicePrincipalNames等 - 接口会直接返回混合排序后的结果,排序逻辑和 Azure 门户默认规则一致,也可自定义排序权重
请求示例(仅展示结构):
POST https://graph.microsoft.com/v1.0/search/query Content-Type: application/json ConsistencyLevel: eventual { "requests": [ { "entityTypes": ["user", "group", "servicePrincipal"], "query": { "queryString": "你的搜索关键词" }, "fields": ["displayName", "mail", "servicePrincipalNames", "id"], "size": 20 } ] }
方案2:批量调用独立接口自行合并结果
如果需要更灵活的结果处理规则,可以调用 MS Graph 批量接口一次性触发三类对象的独立搜索,再自行合并:
- 每个子请求使用
$search参数同时匹配多字段,例如用户搜索参数为"$search": "\"displayName:关键词 OR mail:关键词\"" - 结果合并时可自定义展示优先级:通常建议优先展示完全匹配的结果,同匹配度下按用户>组>服务主体的顺序排序,和 Azure 门户体验保持一致
- 分页处理:首次请求每类对象各拉取20条,合并后取前20条作为第一页;后续分页时根据上一页最后一条结果的匹配等级,对应拉取对应类型接口的下一页数据即可
权限要求
两种方案都需要为你的应用申请对应权限:User.Read.All、Group.Read.All、Application.Read.All,可根据实际使用场景选择委托权限或应用权限。
内容的提问来源于stack exchange,提问作者Kyle N
相关产品推荐
相关产品推荐

