Active Directory LDAP搜索过滤器或操作符语法

本文关键字:操作符 语法 过滤器 搜索 Directory LDAP Active | 更新日期: 2023-09-27 17:54:15

我在c#中使用LDAP目录服务,通过一些过滤条件从LDAP中搜索用户。我想提供多个OR过滤条件。例如firstName, lastName, telephone等。当我提供所有过滤器值时,它工作得很好,但当我只提供一个或两个过滤器值时,它会给出错误。

下面是我使用的示例代码:

var LdapSearcher = new DirectorySearcher(RootDomain, 
                   "(&(objectclass=user)(sn=" + lastName.Trim() + ")(givenName=" + firstName.Trim() + "))");

当我同时提供sn和givenName值时,我得到结果。然而,这是一个OR搜索,用户将输入lastName或FirstName。

如何在LDAP DirectorySearcher中应用OR Filter ?

Active Directory LDAP搜索过滤器或操作符语法

您需要使用|操作符。根据您提供的信息,您的条件是:

  • objectclass必须等于"user"
  • sngivenName必须等于提供的值

假设用户提供了"John Smith"这个名字。你的过滤器应该看起来像:

(&(objectClass=user)(|(sn=Smith)(givenName=John)))

var LdapSearcher = new DirectorySearcher(RootDomain, 
                   "(&(objectclass=user)" +
                    (!(string.IsNullOrEmpty(lastName.Trim())) ? "(sn=" + lastName.Trim() + ")" : "") +
                    (!(string.IsNullOrEmpty(firstName.Trim())) ? "(givenName=" + firstName.Trim() + ")" : "")
                    + ")");