C# - 使用 LDAP 检索 Active Directory 的组成员

Posted

技术标签:

【中文标题】C# - 使用 LDAP 检索 Active Directory 的组成员【英文标题】:C# - Retrieve Group members of Active Directory using LDAP 【发布时间】:2020-05-12 10:33:03 【问题描述】:

我的 Active Directory 中有一个“我的组”组,我想使用 Active Directory LDAP 从该组中检索用户。

如何修改我的查询以包含 Group 并从中获取成员?

string username = “ldapuser”;
string password = “prime812”;
DirectoryEntry de = new DirectoryEntry(“LDAP://AM-LDAP-SN.ams.com/389/CN=Users,DC=ms,DC=ds,DC=AMS,dc=com”, username,password);
DirectorySearcher deSearch = new DirectorySearcher(de);
deSearch.SearchScope = SearchScope.Subtree;

forreach(SearchResult sResultSet in deSearch.FindAll())


【问题讨论】:

【参考方案1】:

我会使用 PrincipalContext 而不是:

private static List<Principal> GetUsersOfGroup(string groupname)

    string username = "ldapuser";
    string password = "prime812";

    using(var pc = new PrincipalContext(ContentType.Domain, null, username, password))
    
        var _users = new List<Principal>();
        var _group = GroupPrincipal.FindByIdentity(pc, groupname);

        foreach(var member in group.GetMembers())
        
            if(member is UserPrincipal _user)
                _users.Add(_user);
        

        return _users;
    

【讨论】:

工作,但打印每个用户需要 1 秒,我有几乎成千上万的用户.. 任何线索为什么它这么慢? 主要对象可能会减慢速度,请尝试仅返回您需要的信息列表而不是对象。我会做类似return _users.Select(o =&gt; new o.SamAccountName, o.DisplayName ).ToList();

以上是关于C# - 使用 LDAP 检索 Active Directory 的组成员的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring 安全性从 Active Directory LDAP 填充 LDAP 权限?

通过 LDAP 连接到 Active Directory

使用 SQL Server 2005 通过 LDAP 访问 Active Directory 角色成员资格

通过 C# 删除 Active Directory 中的用户

使用asp.net c#查找Ldap中的所有用户

如何在 php 中使用 LDAP 从 Active Directory 搜索和更新用户数据?