我试图通过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失败。
我看到两种方式:
我不是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]