Reputation: 85
I am struggling to get all users in .NET Azure Active Directory groups recursively. I googled out but all articles are on users memberof groups for Azure Active Directory.
Any help would be highly appreciated.
Thanks
Anil Jain
Upvotes: 0
Views: 1397
Reputation: 14649
Based on my understanding, to retrieve the members from group recursively, we only need to detect the type of member. If the member is group we can request the members again.
I also wrote a demo using Azure AD graph client for your reference:
public void testPrintMembersRecursively()
{
var client = GraphHelper.CreateGraphClient();
var group = (Group)client.Groups.ExecuteAsync().Result.CurrentPage.First(g => g.DisplayName == "group4");
var groupFetcher = client.Groups.GetByObjectId(group.ObjectId);
PrintMembersRecursively(groupFetcher, 0);
}
public void PrintMembersRecursively(Microsoft.Azure.ActiveDirectory.GraphClient.IGroupFetcher groupFetcher, int level)
{
var membersResoult = groupFetcher.Members.ExecuteAsync().Result;
Print(level, membersResoult);
while (membersResoult.MorePagesAvailable)
{
membersResoult=membersResoult.GetNextPageAsync().Result;
Print(level,membersResoult);
}
}
private void Print(int level, IPagedCollection<IDirectoryObject> membersResoult)
{
var members = membersResoult.CurrentPage;
foreach (var obj in members)
{
var user = obj as Microsoft.Azure.ActiveDirectory.GraphClient.User;
if (user != null)
Console.WriteLine(String.Format("{0," + level * 8 + "}", user.DisplayName));
else
{
var groupMember = obj as Microsoft.Azure.ActiveDirectory.GraphClient.Group;
if (groupMember != null)
{
Console.WriteLine(String.Format("{0," + level * 8 + "}", groupMember.DisplayName));
PrintMembersRecursively(GetGroupById(groupMember.ObjectId), level + 1);
}
}
}
}
public static ActiveDirectoryClient CreateGraphClient()
{
string accessToken = "";
string tenantId = "xxx.onmicrosoft.com";
string graphResourceId = "https://graph.windows.net";
Uri servicePointUri = new Uri(graphResourceId);
Uri serviceRoot = new Uri(servicePointUri, tenantId);
ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async () => await Task.FromResult(accessToken));
return activeDirectoryClient;
}
Upvotes: 2