LDAP / ActiveDirectory BindDN语法


8

我正在对客户端的基于Linux的硬件防火墙进行故障排除。此硬件防火墙连接到ActiveDirectory以进行单点登录身份验证。

就我所知,ActiveDirectory只是largley的一个变态版本,并且使用相同的BindDN语法-如果我错了,请纠正我。

客户端已将其配置为它们的BindDN-出于隐私原因已替换了实际的字符串,但保留了特殊字符和空格。“ somerandomplace \ fubar fubaz”

对我来说,这似乎不是有效的BindDN语法,并且我以前使用过LDAP,但是当我们单击“测试”按钮来测试此BindDN时,测试成功。当我仅更改BindDN中的一个字符并再次运行测试时,测试将失败。

我正在尝试找出问题所在:

A)我不完全了解BindND和相关语法的细微差别

要么

B)设备未正确验证输入,并且错误地将测试标识为成功

Answers:


14

LDAP只是一个协议。就像Greg所说的那样,Microsoft在Active Directory中对它的实现符合定义它的各种RFC。(对他+1)

道格的回答部分正确,因为他举例说明了有效的绑定DN。但是Active Directory特别允许Bind DN值也以其他形式发送。我认为最好使用的形式是,UserPrincipalName (UPN)除非已明确更改,否则通常采用以下形式。

  • <sAMAccountName> @ <域FQDN>(例如user1@contoso.com)

与常规DN值相比,这样做的好处是可以在AD中移动用户帐户,并且使用凭据的应用程序不必更新其配置。

它也可以采用旧式NetBIOS形式,看起来像这样,似乎是客户端使用的形式。

  • <域NetBIOS名称> \ <sAMAccountName>(例如CONTOSO \ user1)

这具有与UPN值相同的好处,但再次被认为是旧的。NetBIOS名称应该早就死掉了,但这是另一个线程的烦恼。


谢谢!关于DN的3种形式的评论是我遗漏的难题。
Mark E. Haase 2014年

不知道您可以使用UPN作为LDAP DN。甜。
乔纳森·莱因哈特

1
令我惊讶的是,有多少只支持针对AD(通过LDAP)进行外部身份验证的应用程序供应商也不知道这一点。
Ryan Bolger

2

对于位于“用户”容器中的用户,绑定DN为CN =用户名,CN = Users,DC =您的域,DC = com。

如果您也只输入用户名,则可能会起作用,因为如果Active Directory知道,它可能会搜索sAMAccountname属性。只是不要在域名前加上用户名。


1

Microsoft的LDAP实现是兼容的。DN中的任何字符均有效。如果有特殊字符,则必须将其转义。除非前导或尾随空格,否则不必对其进行转义。可以使用反斜杠或等效的\ nn十六进制对字符进行转义。

专有名称
http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa366101%28v=vs.85%29.aspx

space or # character at the beginning of a string    0x20
space character at the end of a string    0x20
,    comma    0x2C
+    plus sign    0x2B
"    double quote    0x22
\    backslash    0x5C
<    left angle bracket    0x3C
>    right angle bracket    0x3E
;    semicolon    0x3B
LF   line feed    0x0A
CR   carriage return    0x0D
=    equals sign    0x3D
/    forwards slash    0x2F 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.