如何高效查询Microsoft Graph中指定前缀组的所有用户?
高效获取指定前缀组下所有用户的方案
方案1:单请求带$expand拉取组及成员
直接在组查询请求中添加$expand=members参数,一次性获取所有目标组及其成员,避免多次请求:
GET https://graph.microsoft.com/v1.0/groups?$filter=startswith(displayName, 'idm2cbd_app_')&$expand=members
如果组内成员较多,会触发分页,只需处理响应中的@odata.nextLink即可拉取完整数据,相比循环22次请求,能大幅减少HTTP交互次数。
方案2:批量请求(Batch Request)
若$expand因数据量过大触发限制,可采用批量请求,仅需一次HTTP调用完成所有组的成员查询:
- 先执行一次组查询,拿到所有目标组的ID
- 构造如下POST请求(Content-Type设为
application/json):
{ "requests": [ { "id": "1", "method": "GET", "url": "/groups/{group-id-1}/members" }, { "id": "2", "method": "GET", "url": "/groups/{group-id-2}/members" }, // 依次填入剩余20个组的ID对应的查询项 ] }
- 解析响应中每个请求的结果,汇总所有用户即可
方案3:跨组用户筛选(需Azure AD Premium许可)
如果你的租户拥有Azure AD Premium权限,可以直接查询属于这些组的所有用户,无需分别处理每个组:
GET https://graph.microsoft.com/v1.0/users?$filter=memberOf/any(g: g/id in ('{group-id-1}', '{group-id-2}', ..., '{group-id-22}'))
这个请求直接返回所有目标组下的用户,性能最优,22个组的ID数量不会触发URL长度限制,可放心使用。
注意事项
- 所有请求需确保应用已获得
GroupMember.Read.All或Directory.Read.All等对应权限 - 优先选择方案1,实现成本最低;若遇到数据量限制,再切换到方案2或3
内容的提问来源于stack exchange,提问作者Jan Rojowski
相关产品推荐
相关产品推荐

