AAD 组中的用户数

时间:2021-06-23 21:34:56

标签: azure-active-directory microsoft-graph-api microsoft-graph-groups

是否有 Microsoft Graph API 可以找出 AAD 组中的用户数量?目前,这是我如何找到它的代码。想知道是否有更快的方法?

            private async Task<int> GetUserIds(string groupId)
            {
                List<string> userIds = new List<string>();

                var usersFromGroup = await _groupMembersService.GetGroupMembersPageByIdAsync(groupId);
                usersFromGroup.AdditionalData.TryGetValue("@odata.nextLink", out object nextLink);
                var nextPageUrl = (nextLink == null) ? string.Empty : nextLink.ToString();
                userIds.AddRange(usersFromGroup.OfType<Microsoft.Graph.User>().Select(x => x.Id));

                while (!string.IsNullOrEmpty(nextPageUrl))
                {
                    usersFromGroup = await _groupMembersService.GetGroupMembersNextPageAsnyc(usersFromGroup, nextPageUrl);
                    usersFromGroup.AdditionalData.TryGetValue("@odata.nextLink", out object nextLink2);
                    nextPageUrl = (nextLink2 == null) ? string.Empty : nextLink2.ToString();
                    userIds.AddRange(usersFromGroup.OfType<Microsoft.Graph.User>().Select(x => x.Id));
                }

                return userIds.Count;
            }
        }

        public async Task<IGroupTransitiveMembersCollectionWithReferencesPage>GetGroupMembersPageByIdAsync(string groupId)
        {
            return await this.graphServiceClient
                                    .Groups[groupId]
                                    .TransitiveMembers
                                    .Request()
                                    .Top(this.MaxResultCount)
                                    .WithMaxRetry(this.MaxRetry)
                                    .GetAsync();
        }

        public async Task<IGroupTransitiveMembersCollectionWithReferencesPage> GetGroupMembersNextPageAsnyc(
            IGroupTransitiveMembersCollectionWithReferencesPage groupMembersRef,
            string nextPageUrl)
        {
            groupMembersRef.InitializeNextPageRequest(this.graphServiceClient, nextPageUrl);
            return await groupMembersRef
                .NextPageRequest
                .GetAsync();
        }

2 个答案:

答案 0 :(得分:0)

您可以使用 list members Graph API 获取群组的直接成员列表。

正如 Example 3 所说,我们可以使用 OData cast$count 来仅获取用户成员资格的计数。

GET https://graph.microsoft.com/v1.0/groups/{id}/members/microsoft.graph.user/$count
ConsistencyLevel: eventual

很遗憾,我在 Graph SDK 中找不到 OData cast。您可以在 C# 中使用 HttpRequestMessage 调用此请求 URL,请参阅 here

var requestUrl = "https://graph.microsoft.com/v1.0/groups/{id}/members/microsoft.graph.user/$count";
var message = new HttpRequestMessage(HttpMethod.Get, requestUrl);
message.Headers.Add("consistencylevel", "eventual");
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(message);
var response = await graphClient.HttpProvider.SendAsync(message);

答案 1 :(得分:0)

您可以使用此图形 API 获取任何组的计数。 https://graph.microsoft.com/v1.0/groups/{group-object-id}/members/$count

确保为此在请求标头中添加 ConsistencyLevel = Eventual。 为您测试了这是图形浏览器:

MS graph explorer Image