简体   繁体   English

MVC5如何遍历Azure活动目录用户组

[英]MVC5 how to iterate through an azure active directory user group

I've managed to get the group I want from AAD by using 我设法通过使用从AAD获得了想要的小组

ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
              async () => await GetTokenForApplication());

        // use the token for querying the graph to get the user details

        var result = await activeDirectoryClient.Groups.Where(u => u.DisplayName.Equals("myGroupName")).ExecuteAsync();

But I'm not sure how to iterate through the group I got and add all the users from that group into a list. 但是我不确定如何遍历所获得的组并将该组中的所有用户添加到列表中。

Do this: 做这个:

List<IGroup> groups = result.CurrentPage.ToList();
foreach (IGroup group in groups)
{
    // do whatever you need to
}

EDIT 编辑

does IGroup have and property that allows me to get the users in that group such as members IGroup是否具有和属性,该属性使我能够获取该组中的用户(例如成员)

Yes it does but you will need to explicitly ask for it to be expanded. 是的,但是您需要明确要求对其进行扩展。 Here is how to get all the users for the group: 以下是获取该组所有用户的方法:

var groups = await activeDirectoryClient.Groups
    .Where(g => g.DisplayName == groupName).Expand(g => g.Members)
    .ExecuteAsync();

var usersForGroup = new List<User>();
foreach(IGroup thisGroup in groups)
{
    do
    {
        var thisGroupUsers = 
            thisGroup.Members.CurrentPage.Select(m => m as User)).Where(u => u != null);
        allUsers.AddRange(thisGroupUsers);

        // get next page asynchronously
        await thisGroup.Members.GetNextPageAsync();
    } while(thisGroup.Members.MorePagesAvailable)

}

When you have the group's object ID, you can get the direct members using this URL in the graph API: 有了群组的对象ID时,您可以在图形API中使用以下URL获取直接成员:

https://graph.windows.net/myorganization/groups/{object_id}/$links/members?api-version

The IGroup result you get in your code (eg using result.First() ), does contain a Members property, which you can use to loop through the members. 您在代码中获得的IGroup结果(例如,使用result.First() )确实包含一个Members属性,您可以使用该属性遍历成员。

You can use an IGroupFetcher to retrieve group members: 您可以使用IGroupFetcher检索组成员:

var group = await adClient.Groups.Where(g => g.ObjectId == groupObjectId).ExecuteSingleAsync();
IGroupFetcher groupfetcher = (Group)group;
var membersResult = await groupfetcher.Members.ExecuteAsync();

var more = true;
while (more)
{
    foreach (var member in membersResult.CurrentPage) 
    {
    //... remember to handle that members can be other groups
    }
    if (!membersResult.MorePagesAvailable)
    {
        more = false;
    }
    else
    {
        // get next page in results
        membersResult = await membersResult.GetNextPageAsync();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM