【问题标题】:Get all users in .NET Azure Active Directory groups recursively递归获取 .NET Azure Active Directory 组中的所有用户
【发布时间】:2016-10-27 14:28:23
【问题描述】:

我正在努力以递归方式获取 .NET Azure Active Directory 组中的所有用户。我用谷歌搜索了,但所有文章都是关于 Azure Active Directory 组的用户成员。

任何帮助将不胜感激。

谢谢

阿尼尔·贾恩

【问题讨论】:

    标签: .net azure active-directory


    【解决方案1】:

    根据我的理解,要递归地从组中检索成员,我们只需要检测成员的类型。如果成员是组,我们可以再次请求成员。

    我还使用 Azure AD 图形客户端编写了一个演示供您参考:

    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;
    }
    

    【讨论】:

    • 感谢您的回答,但很遗憾,我无法尝试此操作,因为这已被妥善处理,但由于您已经尝试过,我会将其标记为已接受的答案。
    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多