我正在通过Microsoft Graph从AzureAD请求用户列表。
我返回User对象,但它们的MemberOf属性始终为null。
我以为我可以使用Expand来专门请求该属性,虽然它不会导致错误,但它也不会填充该属性。
此question and answer from mid-2016表明此功能当时处于测试阶段,我认为它现在已经逐渐投入到生产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,然后过滤用户是正确的方式,那就没问题,我会继续使用。
理想情况下,我想提出一个请求来检索用户对象,并在服务器端完成过滤。
e.g。
var usersInGroup = await graphClient
.Users
.Request()
.Filter($"memberOf eq {groupId}")
.GetAsync();
显然过滤器不起作用,但类似的东西是理想的。
(有人指出我一直在链接到错误的文档集,因此我删除了这些链接以防止未来读者混淆) < / p>
答案 0 :(得分:3)
可以使用$expand
获取单个组的成员资格。例如,在Graph Explorer中运行以下查询将返回群组HRTaskforce
及其所有成员:
https://graph.microsoft.com/v1.0/groups/02bd9fd6-8f93-4758-87c3-1fb73740a315?$expand=members
使用.NET Client 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
相同)并不总是安全的。