Active Directory的LDAPsearch筛选器

我试图通过LDAP查询在Active Directory中查找用户。 基本上我正在以这种方式search用户:

Search DN: dc=mydomain, dc=com Filter: (sAMAccountName=USER) where USER is replaced with the provided username. 

现在,如果用户只是没有域的用户名(例如“乔”),这工作正常。 不过,我收到他们的forms(域\用户名,例如“myDomain \ Joe”),显然search失败。

我看到两种方式:

  • 在searchfilter中使用正则expression式来丢弃该域
  • 使用完全不同的searchfilter

我不是LDAP专家,我甚至不知道是否可以在searchfilter中使用正则expression式。

有谁知道这是可能的,以及如何?

PS我不能预处理用户名剥离域。 这不能改变,因为它是大系统的一部分。

不可能使用不同的filter。 用户帐户没有域名的属性,所以你不能以域为参数来构造查询。

在Active Directory中,LDAP服务仅包含来自域的信息,DC是其控制器。 如果你在森林中拥有其他的信任,为了获得来自不同领域的用户的信息,你应该联系来自该域的LDAP服务。

正确的解决scheme:丢弃searchfilter的域名。 属性sAMAccountName在域中是唯一的。

如果你在一个* nix框中,使用openldap工具,search很简单。 例

 ldapsearch -h servername -b "dc=domain,dc=com" -D [email protected] -W -x sAMAccountName=username 

userPrincipalName:[email protected]

我不确定是否可以在filter中使用正则expression式。 编写一个脚本,将输出转储到一个文件并实现正则expression式。

LDAP支持通配符,但我不知道正则expression式(可能某些特定的实现可能)

你可以使用下面的filter:

 (|(sAMAccountName=USER)(sAMAccountName=*\USER)) 

这将匹配用户名,或一些字符,反斜杠和用户名。

取决于你使用的是什么工具会影响你如何或者是否需要避开反斜杠。

Win2k之前的域名不是sAMAccountName属性的一部分。 如果要在用户名中search域…请使用userPrincipleName,其格式为username @ domainFQDN例如:[email protected]