我正在为客户排除基于 Linux 的硬件防火墙故障。此硬件防火墙连接到 ActiveDirectory 以进行单点登录身份验证。
据我所知,ActiveDirectory 很大程度上只是 LDAP 的一个变质版本,并且使用相同的 BindDN 语法——如果我错了,请纠正我。
客户端已将其配置为其 BindDN——出于隐私原因,实际字符串已被替换,但特殊字符和空格仍保留。“somerandomplace\fubar fubaz”
在我看来,这似乎不是有效的 BindDN 语法,而且我以前使用过 LDAP,但当我们点击“测试”按钮来测试此 BindDN 时,测试成功。当我仅更改 BindDN 中的一个字符并再次运行测试时,测试失败。
我正在尝试找出这里的问题所在:
A)我不完全理解 BindND 和相关语法的细微差别
或者
B)设备未能正确验证输入并错误地将测试认定为成功
答案1
LDAP 只是一种协议。正如 Greg 所说,Microsoft 在 Active Directory 中对它的实现符合定义它的各种 RFC。(+1)
Doug 的回答部分正确,因为他给出了一个有效绑定 DN 的示例。但 Active Directory 明确允许以其他形式发送绑定 DN 值。我认为最好的形式是,UserPrincipalName (UPN)
除非明确更改,否则通常采用以下形式。
- <sAMAccountName>@<域 FQDN> (例如[电子邮件保护])
与正常 DN 值相比,这样做的好处是,用户帐户可以在 AD 内移动,并且使用凭证的应用程序不必更新其配置。
它也可以是传统的 NetBIOS 形式,看起来像这样,并且似乎是您的客户端正在使用的。
- <域 NetBIOS 名称>\<sAMAccountName>(例如 CONTOSO\user1)
这具有与 UPN 值相同的好处,但同样被视为遗留问题。NetBIOS 名称早就应该消失了,但那是另一个话题的吐槽。
答案2
对于位于用户容器中的用户,绑定 DN 将是 CN=username,CN=Users,DC=yourdomain,DC=com。
如果您只输入用户名,它可能会起作用,因为如果它支持 Active Directory,它可能会搜索 sAMAccountname 属性。只是不要在用户名前面加上域。
答案3
Microsoft 的 LDAP 实现是兼容的。DN 中的任何字符都是有效的。如果有特殊字符,则必须对其进行转义。空格不需要进行转义,除非它是前导或尾随的。可以使用反斜杠或 \nn 十六进制等效字符对字符进行转义。
专有名称
http://msdn.microsoft.com/en-us/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