Active Directory 的 LDAP 搜索过滤器

Active Directory 的 LDAP 搜索过滤器

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

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

现在,如果 USER 只是用户名,没有域名(例如“Joe”),则一切正常。但是我以(域名\用户名,例如“myDomain\Joe”)的形式接收它们,显然搜索失败。

我认为有两种方法:

  • 在搜索过滤器中使用正则表达式来丢弃域名
  • 使用完全不同的搜索过滤器

我不是 LDAP 专家,甚至不知道是否可以在搜索过滤器中使用正则表达式。

有人知道这是否可行以及如何实现吗?

PS 我无法预处理用户名以删除域名。这无法更改,因为它是一个大型系统的一部分。

答案1

无法使用不同的过滤器。用户帐户没有带域名的属性,因此您无法以域为参数构建查询。

在 Active Directory 中,LDAP 服务仅包含域中的信息,而 DC 是该域的控制器。如果您与林中的其他域有信任,则要获取有关不同域中用户的信息,您应该联系该域的 LDAP 服务。

正确的解决方案:从搜索过滤器中丢弃域名。属性 sAMAccountName 在域中是唯一的。

答案2

如果您使用的是 *nix 机器,使用 openldap 实用程序,搜索就很简单了。示例

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

用户主体名称:[电子邮件保护]

我不确定您是否可以在过滤器中使用正则表达式。编写一个将输出转储到文件的脚本并实现正则表达式。

答案3

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

您可以使用以下过滤器:

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

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

您使用的工具将影响是否需要或如何转义反斜杠。

答案4

Pre-Win2k 域名不是 sAMAccountName 属性的一部分。如果您想在用户名中搜索域...请使用 userPrincipleName,其格式为 username@domainFQDN 例如: [电子邮件保护]

相关内容