使用Microsoft Graph API获取组织内所有组成员的技术咨询
获取所有群组成员(含特定邮箱后缀筛选)的Microsoft Graph API方案
当然可以直接获取所有群组的成员,甚至精准筛选出邮箱后缀为@myCompany.co.uk的用户,下面给你几个实用的实现方案:
方案1:用$expand直接关联群组与成员
你可以在获取群组的请求中,通过$expand参数直接拉取每个群组的成员,同时结合$filter筛选目标邮箱后缀:
GET https://graph.microsoft.com/v1.0/groups?$expand=members($filter=endsWith(mail,'@myCompany.co.uk'))&$select=id,displayName,members
注意:这个方法有个小限制——Graph API对
$expand返回的关联对象数量有默认上限(通常是100个),如果你的群组数量多或部分群组成员数超标,可能需要配合分页或$top参数调整返回量。
方案2:批量请求(适合大量群组场景)
如果组织内群组数量较多,批量请求会更高效,能规避单次请求的限制。你可以先获取所有群组的ID列表,再动态生成批量请求内容,一次性拉取多个群组的筛选后成员:
POST https://graph.microsoft.com/v1.0/$batch Content-Type: application/json { "requests": [ { "id": "1", "method": "GET", "url": "/groups/{group-id-1}/members?$filter=endsWith(mail,'@myCompany.co.uk')&$select=id,displayName,mail" }, { "id": "2", "method": "GET", "url": "/groups/{group-id-2}/members?$filter=endsWith(mail,'@myCompany.co.uk')&$select=id,displayName,mail" } // 最多支持20个请求/批次,可按需添加更多群组请求 ] }
方案3:反向查询目录用户(无需关联具体群组)
如果你只需要所有在群组中、邮箱符合要求的用户,不需要绑定到具体群组,可以直接查询目录用户:
GET https://graph.microsoft.com/v1.0/users?$filter=endsWith(mail,'@myCompany.co.uk') and memberOf/$count ne 0&$select=id,displayName,mail,memberOf
注意:使用
$count需要在请求头中添加ConsistencyLevel: eventual,且需要Directory.Read.All(应用权限)或Directory.Read(委派权限)。
必备权限说明
无论选哪种方案,都需要确保应用/用户拥有对应权限:
- 基础群组与成员读取:
Group.Read.All(应用权限)或Group.Read(委派权限) - 目录级用户查询:
Directory.Read.All(应用权限)或Directory.Read(委派权限)
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

