
[英]Microsoft AAD Group - get members of 'group' type using Microsoft Graph
[英]Get ONLY the count of members of 'User' type from an AAD group using Graph API
是否有图表 API 可以从 AAD 组中获取特定类型的成员数量? 例如,考虑以下 AAD 组:
该组包含 3 个“用户”类型的成员。 是否有图表 API 只能获得该计数,即 3? 或者我应该从组中获取所有成员并进行一些过滤以获取“用户”类型的成员,如下所示并找出计数:
var users = new List<Guid>();
var response = await graphClient
.Groups[groupId]
.TransitiveMembers
.Request()
.GetAsync();
users.AddRange(ToUsers(response));
private IEnumerable<Guid> ToUsers(IEnumerable<DirectoryObject> members)
{
foreach (var directoryObj in fromGraph)
{
switch (directoryObj)
{
case User user:
yield return Guid.Parse(user.Id);
break;
default:
break;
}
}
}
要从 AAD 组中获取特定类型的成员数,您可以使用以下查询:
GET https://graph.microsoft.com/v1.0/groups/<group_id>/members/microsoft.graph.user/$count
我试图在我的环境中重现相同的结果并得到以下结果:
我创建了一个Azure AD 组,其中包含不同类型的成员,如下所示:
我通过Graph Explorer运行了以下查询,并成功获取了User
类型的成员数,如下所示:
GET https://graph.microsoft.com/v1.0/groups/<group_id>/members/microsoft.graph.user/$count
确保在运行查询时添加ConsistencyLevel: Eventual
请求 header。
回复:
您可以通过选择代码片段选项卡来获取任何语言的代码,如下所示:
C# 中的代码示例
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var int32 = await graphClient.Groups["groupID"].Members.$count
.Request()
.Header("ConsistencyLevel","Eventual")
.GetAsync();
首先,让我们看一下与您的要求相同的图表api 示例。 它需要/members/microsoft.graph.user
,但 Graph SDK 目前不支持按派生类型进行过滤,这是一个已知问题,请参阅此问题。 所以我们需要使用这样的代码:
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "tenant_name.onmicrosoft.com";
var clientId = "aad_app_id";
var clientSecret = "client_secret";
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var groupUrl = graphClient.Groups["group_id"].Members.AppendSegmentToRequestUrl("microsoft.graph.user");
var groupRequest = await new GraphServiceGroupsCollectionRequest(groupUrl, graphClient, null).GetAsync();
var userCount = groupRequest.Count;
我们需要在请求中使用AppendSegmentToRequestUrl
to append microsoft.graph.user
它对我有用。
顺便说一句,您可能还想 append /$count
。 使代码应如下所示:
var requestOptions = new List<HeaderOption>()
{
new HeaderOption("ConsistencyLevel", "eventual")
};
var groupUrl = graphClient.Groups["group_id"].Members.AppendSegmentToRequestUrl("microsoft.graph.user/$count");
var groupRequest = await new GraphServiceGroupsCollectionRequest(groupUrl, graphClient, requestOptions).GetAsync();
但它会抛出异常,因为响应是一个数字而不是Group
。 所以我们不能使用它,除非我们使用 http 客户端手动发送获取请求,但它与图形 SDK 无关。 无论如何,我会在这里分享代码。
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret);
var tokenRequestContext = new TokenRequestContext(scopes);
var token = clientSecretCredential.GetTokenAsync(tokenRequestContext).Result.Token;
httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token );
var groupUrl = graphClient.Groups["group_id"].Members.AppendSegmentToRequestUrl("microsoft.graph.user/$count");
HttpResponseMessage response = await _httpClient.GetAsync(groupUrl);
最后,请看下面的截图。 所以图形资源管理器生成的代码片段是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.