通过Microsoft Graph从Azure AD获取用户组中的用户

8
我通过Microsoft Graph从AzureAD请求用户列表。我得到了用户对象,但他们的MemberOf属性总是为空。我认为我可以使用Expand来特别请求该属性,虽然它不会导致错误,但也不会填充该属性。这个问题和2016年中期的问题和答案表明,该功能当时处于beta版,而我认为它现在已经进入了生产API?
var allUsers = await graphClient
    .Users
    .Request()
    .Expand("memberOf")
    .GetAsync();

var usersInGroup = allUsers
    .Where(user => user.MemberOf.Any(memberOf => memberOf.Id.Equals(groupId, StringComparison.OrdinalIgnoreCase)))
    .ToList();

我已经尝试扩展“memberOf”和“MemberOf”。

我可以通过组检索成员列表。

但是这将返回一个ID列表,因此我需要进行两个请求,而不仅仅是一个请求。

var groupMembers = await graphClient
    .Groups[groupId]
    .Members
    .Request()
    .GetAsync();

var groupMemberIds = groupMembers
    .Select(groupMember => groupMember.Id)
    .ToList();

var allUsers = await graphClient
    .Users
    .Request()
    .GetAsync();

var usersInGroup = allUsers
    .Where(user => groupMemberIds.Contains(user.Id))
    .ToList();

如果获取属于该组的ID并过滤用户是正确的方法,那么我会跟随这种方法。理想情况下,我希望通过单个请求从服务器端检索用户对象并进行过滤。
例如:
var usersInGroup = await graphClient
    .Users
    .Request()
    .Filter($"memberOf eq {groupId}")
    .GetAsync();

显然,那个过滤器不会起作用,但类似的东西是理想的。
(有人指出我链接到了错误的文档集,因此我已删除了这些链接以防止给未来读者带来困惑)
1个回答

14

使用$expand可以获取单个组的成员资格。例如,在Graph Explorer中运行以下查询将返回组HRTaskforce及其所有成员:

https://graph.microsoft.com/v1.0/groups/02bd9fd6-8f93-4758-87c3-1fb73740a315?$expand=members

使用 .NET 客户端 SDK,您可以像这样做:

var  groupAndMembers = await _tokenService.Token.GetGraphServiceClient()
    .Groups["02bd9fd6-8f93-4758-87c3-1fb73740a315"]
    .Request()
    .Expand("members")
    .GetAsync();

var usersInGroup = groupAndMembers.Members.ToList();

顺带一提,你提供的所有文档都来自Azure AD Graph API。请注意,这是一个不同的API,不能总是安全地假设Azure AD Graph的资源和方法将可用(或以相同方式工作)于Microsoft Graph。


我刚试了一下那个查询,它正好符合我的要求,谢谢。不幸的是,在搜索这个主题的资源时很容易进入错误的页面。例如,使用谷歌搜索“microsoft graph get users in group”会给我一个与MS Graph文档无关的链接,接下来的几个链接都是AzureAD文档。Bing也是类似的,前几个结果都链接到Azure AD文档。显然,我需要更加注意自己落脚的地方。 - user310988
2
我早就接受了谷歌或必应的思维方式是无法改变的事实(其中有个笑话)。个人而言,在扩大搜索范围之前,我会使用GitHub存储库搜索API文档。这有助于将范围限制在仅涉及图形主题的内容上,并且通常会从GitHub问题中浮现出额外的信息。该存储库位于https://github.com/microsoftgraph/microsoft-graph-docs。 - Marc LaFleur
1
谢谢你的建议,从现在开始这将非常有用。我有时会使用站点限制搜索,通常只想要Stack Overflow的结果,所以我有点失望在这种情况下没有想到尝试它。不过我没想到可以将其限制在文档库中,这是一个非常有价值的方法。 - user310988

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接