【问题标题】:Group memberships for users returned by $expand=memberOf are unreliable$expand=memberOf 返回的用户的组成员身份不可靠
【发布时间】:2021-04-27 13:43:36
【问题描述】:

我正在构建一个使用 Graph Api 从 Azure Ad 下载所有用户、组和组成员身份的集成。

过去,我已经对所有用户、组和成员进行了分页(对于具有 100k+ 用户和 60k+ 组的目录,这很慢,如果同时运行多个实例,则会导致服务器耗尽一段时间后的句柄)。

下载此数据的一种更快的方法是浏览所有用户和组(并扩展两者的 memberOf)。

文档中有一个小警告:https://docs.microsoft.com/en-us/graph/query-parameters#expand-parameter

对于从 directoryObject 派生的 Azure AD 资源,例如用户和组,$expand 仅在测试版中受支持,通常为扩展关系返回最多 20 个项目。

并且,根据这个 SO 答案 https://stackoverflow.com/a/41390581/7240171,没有 NextPageRequest 支持 expand 参数。

为了解决这个问题,我向每个用户和组的 MemberOf 端点发出单独的请求,其中扩展的 memberOf 返回 20 个结果。

这在大多数情况下都有效。但是,我有扩展 memberOf 属性返回 13 个组的用户示例,而用户实际上是 26 个组的成员。我本来希望任何拥有 20 个或更多成员资格的用户的扩展 memberOf 属性将返回 20。

所以。我的问题归结为这个。

当通过 MemberOf API 查询时,对于属于 26 个组的用户。

var memberships = await graph.Users[userId].MemberOf.Request().GetAsync();

为什么使用 $expand=memberOf 查询参数查询时只返回 13 个成员资格(我没有找到排除某些组类型的模式,所以我认为没有应用一些隐式过滤器)。

var userWithMemberships = await graph.Users[userId].Request().Expand("memberOf").GetAsync();

我已经使用 beta 和生产端点进行了测试,并且在两个版本中都看到了相同的问题。 $expand=memberOf 不可靠吗?

【问题讨论】:

  • 您的应用是否有 Member.Read.Hidden 权限?询问是因为拥有"visibility": "Hiddenmembership" 的群组只有在添加了该权限后才会出现在/users/{id/upn}/memberOf 中。

标签: c# azure-active-directory microsoft-graph-api


【解决方案1】:

据我所知,$expand 在目录中有些受限。我认为 api/memberOf 会响应准确的数据。所以我们最好使用api/memberOf(或sdk graph.Users[userId].MemberOf.Request().GetAsync())而不是使用$expand=memberOf

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多