如何通过Microsoft Graph获取AAD组嵌套子组成员身份
AAD嵌套组成员拉取方案
你之前调用的Members接口仅会返回目标组的直接成员,不会自动递归遍历所有嵌套子组下的对象,这是你无法获取嵌套用户的核心原因。要拉取父组下所有嵌套子组包含的全量用户,需要调用Graph提供的传递成员接口,该接口在SDK中就是你期望的链式调用形式。
可直接运行的实现代码
// 查询匹配名称的目标父组 var groups = await graphClient.Groups .Request() .Filter($"startswith(displayName, '{Se_groupName}')") .GetAsync(); var targetGroup = groups.FirstOrDefault(); if (targetGroup == null) { // 自行补充未找到目标组的业务处理逻辑 throw new ArgumentException("未找到匹配指定名称的AAD组"); } // 获取所有嵌套层级下的传递成员,可按需过滤仅返回用户对象 var allNestedUsers = await graphClient.Groups[targetGroup.Id] .TransitiveMembers .Request() // 加过滤条件排除返回的嵌套组对象,仅保留用户 .Filter("isOf('microsoft.graph.user')") .GetAsync();
返回空结果的排查要点
如果调整接口后依然获取不到数据,优先检查两项配置:
- 权限配置:你的AAD应用需要给Microsoft Graph授予
GroupMember.Read.All(最小权限)或Directory.Read.All权限,委托权限场景下需要登录账号有对应组的成员查看权限,应用权限场景下需要完成租户管理员同意 - 组配置:如果目标组是邮件启用的安全组/分发组,需要确认组属性没有开启
hideFromAddressLists、hideFromOutlookClients这类隐藏成员可见性的配置
提示:
TransitiveMembers接口会自动完成全层级嵌套组的递归遍历,支持AAD允许的最大组嵌套深度,不需要你手动编写递归逻辑逐个查询子组成员。
内容的提问来源于stack exchange,提问作者hlaliberte
相关产品推荐
相关产品推荐

