在 Azure AD 图形帮助程序中获取成员组
本文关键字:获取 成员 帮助程序 Azure AD 图形 | 更新日期: 2023-09-27 18:31:04
我使用Graph API查询我的Azure Active Directory,使用Microsoft.WindowsAzure.ActiveDirectory.GraphHelper
项目作为我请求的基础。
在一个特定的用例中,我有一个包含数百个用户的组,以及几个组。我希望加载此父组的组成员。我试图请求加载members
属性:
DirectoryService.LoadProperty(school, "members");
我只得到 100 个结果,都是用户(同样,组中有 100 多个用户)。
我尝试执行DataServiceQuery
但它不支持这样的操作:
var groups = DirectoryService.groups;
Group parentGroup = DirectoryService.groups.Where(it => (it.objectId == parentGroupId)).SingleOrDefault();
groups = (DataServiceQuery<Group>)groups.Where(group => group.memberOf.Contains(parentGroup));
它在第三行失败,表示不支持该表达式。
目前,我能想到的唯一解决方案是加载所有组,在每个组上运行LoadPropert(entity, 'memberOf', null)
,然后检查每个组是否是父组的成员(实际上是几个这样的父组之一)。 注意 - 我把null
放在continuationToken
空间中,因为这些组应该只是一个父组的成员。
这是非常低效的,但我似乎找不到任何其他方法!
有没有其他方法可以做我想做的事情?
AAD 图形 API 当前每页返回 100 个项目。如果您发出的请求是针对多页数据,则响应将包含指向下一页数据的链接。从 Azure AD 图形 API 中支持的查询、筛选器和分页选项:
包含分页结果的响应将包含一个跳过令牌 (odata.nextLink),该令牌允许您获取下一页结果。
查看此情况的最简单方法是以要 https://graphexplorer.cloudpp.net 的目录的用户身份登录。然后,执行简单的GET
:
https://graph.windows.net/<your.domain.name>/users
由于您的用户超过 100 个,因此如果您向下滚动到结果底部,您将看到一个属性odata.nextLink
。如果复制该属性的内容,并在下一个查询中使用,则将获得下一页。继续此示例,下一个请求将如下所示:
https://graph.windows.net/<your.domain.name>/directoryObjects/$/Microsoft.WindowsAzure.ActiveDirectory.User?$skiptoken=X'4453...
我注意到您正在使用已弃用的帮助程序库Microsoft.WindowsAzure.ActiveDirectory.GraphHelper
.相反,应使用较新(且受支持的)图形 API 客户端库:Microsoft.Azure.ActiveDirectory.GraphClient
(NuGet)。以下代码段检索所有组成员,并且仅打印组对象的显示名称:
// Fetch group member objects
IGroupFetcher groupFetcher = (IGroupFetcher)parentGroup;
IPagedCollection<IDirectoryObject> members =
groupFetcher.Members.ExecuteAsync().Result;
// Iterate over each page keep only the Groups
do
{
List<IDirectoryObject> directoryObjects = members.CurrentPage.ToList();
foreach (IDirectoryObject member in directoryObjects)
{
if (member is Group)
{
Group group = member as Group;
Console.WriteLine("Group: {0}", group.DisplayName);
}
}
members = members.MorePagesAvailable ?
members = members.GetNextPageAsync().Result : null;
} while (members != null);
请在 github 上查看我们的最新示例。 示例:https://github.com/AzureADSamples/ConsoleApp-GraphAPI-DotNet 通过最新的图形客户端库对图形 API 进行了许多示例调用,包括获取组成员身份(如上所示)