【问题标题】:Get Users in Group from Azure AD via Microsoft Graph通过 Microsoft Graph 从 Azure AD 获取组中的用户
【发布时间】:2018-02-07 23:59:33
【问题描述】:

我正在通过 Microsoft Graph 从 AzureAD 请求用户列表。

我取回了 User 对象,但它们的 MemberOf 属性始终为空。

我想我可以使用 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,然后过滤用户是正确的方法,那很好,我会这样做。

理想情况下,我想发出一个请求来检索用户对象并在服务器端完成过滤。

例如

var usersInGroup = await graphClient
    .Users
    .Request()
    .Filter($"memberOf eq {groupId}")
    .GetAsync();

显然该过滤器不起作用,但类似的东西会是理想的。

(有人指出我链接到了错误的文档集,所以我删除了这些链接以防止未来读者混淆)

【问题讨论】:

    标签: c# microsoft-graph-api


    【解决方案1】:

    可以使用$expand 获得单个组的成员资格。例如,在 Graph Explorer 中运行以下查询将返回 Group 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 一样可用(或工作方式相同)并不总是安全的

    【讨论】:

    • 我刚刚尝试了该查询,它完全符合我的要求,谢谢。不幸的是,在搜索有关此主题的资源时,很容易在错误的地方结束。例如用 google 搜索“microsoft graph get users in group”会给我一个指向 MS Graph 文档中不相关页面的链接,接下来的几个链接是针对 AzureAD 文档的。必应类似,最上面的结果都链接到 Azure AD 文档。显然我需要更多地注意我要降落的地方。
    • 我很久以前就接受了我无法解决 Google 或 Bing 的想法(那里有一个笑话)。就个人而言,我使用 GitHub 存储库搜索 API 文档,然后再进行更广泛的搜索。这有助于将范围限制为仅 Graph 主题,并且通常会从 GitHub 问题中浮现出额外的掘金。仓库位于github.com/microsoftgraph/microsoft-graph-docs
    • 感谢您的提示,从现在开始这将很有用。我有时会使用站点限制搜索,通常我只想要 Stack Overflow 结果,所以我有点沮丧,在这种情况下我没有想到尝试它。不过,我不会想到将其限制在文档存储库中,这是一种非常有价值的方法。
    猜你喜欢
    • 2020-06-11
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多