代码之家  ›  专栏  ›  技术社区  ›  Psth

如何使用C#中的LdapConnection对象在LDAP中搜索用户?

  •  4
  • Psth  · 技术社区  · 6 年前

    我需要使用C#在LDAP目录中搜索用户。我可以用 DirectoryEntry DirectorySearcher 如下代码所示:

    SearchResultCollection sResults = null;
    
    DirectoryEntry dEntry = new DirectoryEntry(_LDAPConnectionString);
    
    DirectorySearcher dSearcher = new DirectorySearcher(dEntry);    
    dSearcher.Filter = String.Format("(&(objectClass=user)(cn={0}))", userName);
    
    sResults = dSearcher.FindAll();
    

    但要求是创建一个 LdapConnection 对象使用标准访问用户(始终相同),如下所示。用那个特殊的 LdapConnectionObject 使用用户名搜索用户。

    LdapConnection ldapConnectionObject = new LdapConnection(
                    new LdapDirectoryIdentifier(_hostName, _port),
                    null,
                    AuthType.Basic);
    ldapConnectionObject.Bind(accessUserCredential);
    

    我该如何使用上述功能 ldapConnectionObject 搜索用户?

    1 回复  |  直到 6 年前
        1
  •  7
  •   Rocklan    3 年前

    我使用LdapConnection对象搜索找到了答案。因此,我们可以使用LdapConnection类的SendRequest方法,使用SearchRequest返回搜索响应。在下面的例子中,我用uid用户名搜索了用户,并检索了其DN。

    ldapConnection = new LdapConnection(
                    new LdapDirectoryIdentifier(_hostName, _port),
                    null,
                    AuthType.Basic
                    );
    
    string searchFilter = String.Format("(&(objectClass=user)(uid={0}))", userName);
    
    string userStore = "OU=WebsiteUsers,OU=InternalUsers";
    
    SearchRequest searchRequest = new SearchRequest
                    (userStore,
                     searchFilter,
                     System.DirectoryServices.Protocols.SearchScope.Subtree,
                     new string[] { "DistinguishedName" });
    
    var response = (SearchResponse)ldapConnection.SendRequest(searchRequest);
    string userDN = response.Entries[0].Attributes["DistinguishedName"][0].ToString();