You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Microsoft Graph delta查询获取组的所有传递成员

问题背景

现有组层级结构如下:

  • GROUP 1:包含1个直接用户USER 1、1个嵌套组GROUP 2
  • GROUP 2:包含2个用户USER 2、USER 3

调用Microsoft Graph delta查询接口,请求地址为graph.microsoft.com/v1.0/groups/delta?$filter=id eq 'GROUP 1'时,接口响应仅返回直接成员USER 1和GROUP 2,无法返回嵌套组下的USER 2、USER 3。

待解决问题

是否有方法可通过delta查询直接获取包含所有嵌套层级用户在内的组传递成员,即返回结果覆盖USER 1、USER 2、USER 3?

当前实现代码
var a = await grapgClient
                      .Groups
                      .Delta()
                      .Request()
                      .Filter($"id  eq '{groupId}'")
                      .Top(MaxResultCount)
                      .GetAsync();
解答

/groups/delta 接口原生不支持直接返回递归展开的多层嵌套传递成员,默认设计就只会返回目标组的直接成员对象:直接关联的用户、嵌套组都会正常返回,但接口不会自动递归展开嵌套组下的成员,你当前拿到的返回结果完全符合接口的默认行为。

不存在单接口一步到位获取全量传递成员的方案,要拿到所有层级的用户成员,可按以下逻辑实现:

  • 调用现有groups delta接口拿到目标组的直接成员列表,将其中的直接用户存入最终结果集,同时筛选出所有直接嵌套组的ID
  • 对筛选出的每个嵌套组,调用对应组的members delta接口拉取成员,遇到用户就加入最终结果集,遇到新的嵌套组就继续递归拉取对应组的成员,直到遍历完所有层级的嵌套组为止,最后对结果集做去重即可得到包含USER 1、USER 2、USER 3在内的全量传递成员

实现时注意两个要点:

  • 不要尝试在delta请求中添加$expand=members参数实现递归展开,delta查询场景下该参数不支持多层嵌套展开,最多仅能返回第一层直接成员,无法达到获取传递成员的效果
  • 如果要长期做增量成员跟踪,需要为每个涉及到的组单独维护对应的delta令牌,后续拉取变更时直接使用对应组的delta令牌即可,不用每次全量递归遍历所有组,能大幅降低请求开销

内容的提问来源于stack exchange,提问作者user989988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:45:31