首页 > 解决方案 > 如何对 AAD 租户中所有服务主体的导出进行分区?

问题描述

我们需要定期导出有关 AAD 租户的所有服务主体的信息。我们预计这个数字会很大,所以我们需要对导出进行分区。当从 Microsoft Graph 导出用户时,我们能够根据mailNicknameusing startswith(mailNickname, '<letter>')as filter 的首字母进行分区,但尝试appId使用idServicePrincipals 时会出现Request_UnsupportedQuery. 我们可以使用另一种方法来并行化数据导出吗?

请求前:https://graph.microsoft.com/beta/servicePrincipals?$filter=accountEnabled eq true and startswith(appId, '0')&$select=id,appId,displayName&$top=999

标签: microsoft-graph-api

解决方案


您正在尝试的与我在此处分享的方法类似(请随意尝试该代码):

https://github.com/piotrci/Microsoft-Graph-Efficient-Operations/blob/master/Microsoft-Graph-Efficient-Operations/ScenarioImplementations/UserScenarios.cs

Graph 资源通常不支持对 id 进行过滤。在我的简短实验中,我能够使用 servicePrincipal 的 displayName 对集合进行分区。

但是请注意,这种方法并不能保证统一分区。此外,在您的场景(定期完全导出)中,这种优化是否必要?

建议:考虑使用Graph的delta query做一次full export,然后只拾取delta的变化。如果您期望高容量但有限的资源流失,这可能是一个更好的优化。

https://graph.microsoft.com/beta/servicePrincipals/delta

https://docs.microsoft.com/en-us/graph/delta-query-overview


推荐阅读