如何基于指定用户列表从Azure AD Graph查询用户信息并避免性能损耗
问题解答与最优方案推荐
1. 支持传入待匹配用户列表的POST请求确实存在
你可以使用Microsoft Graph的JSON批处理能力实现该需求:
- 接口地址为
https://graph.microsoft.com/v1.0/$batch,单批次POST请求最多可合并20个独立的用户查询请求,服务端会并行处理所有子请求后统一返回结果 - 1000条待校验用户仅需发起50次请求,相比单用户逐一查询的1000次请求,性能提升20倍,同时大幅降低网络开销
2. GET请求筛选参数的长度限制
Microsoft Graph对GET请求的整体URL长度限制为4096字节,扣除接口路径、固定参数等固定开销后,$filter参数可使用的有效长度约为3500字节:
- 如果使用
userPrincipalName in ('xxx@domain.com','yyy@domain.com')的语法批量查询,单次请求最多可传入100150个UPN(取决于单个UPN的长度),1000条待校验用户仅需发起710次请求,性能比批处理方案更优 - 使用
in运算符查询用户时,需要在请求头添加ConsistencyLevel: eventual参数,该功能为Azure AD原生支持的高级查询能力,无需额外付费
最优方案选择
优先使用in运算符批量查询方案:
- 总请求数远低于你提到的两种原有方案,服务端计算压力和网络传输开销都处于极低水平
- 无需拉取全量3万用户做本地匹配,也无需遍历发起上千次单用户查询,实测1000条用户校验耗时通常在2秒以内
如果租户因权限问题无法使用in运算符的高级查询能力,再退而选择JSON批处理的POST方案即可。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

