【发布时间】:2025-12-12 21:45:01
【问题描述】:
使用 LDAP 检查用户名/密码就像尝试绑定该用户并记录结果一样简单,或者是否有特殊的 LDAP“检查密码”功能?
在处理一个凌乱的 LDAP 存储库设置问题时,我试图获得更多“幕后”的理解。
(注意:这是针对密码不作为哈希值存储在自定义属性中的情况;这种情况很容易管理)
【问题讨论】:
标签: ldap
使用 LDAP 检查用户名/密码就像尝试绑定该用户并记录结果一样简单,或者是否有特殊的 LDAP“检查密码”功能?
在处理一个凌乱的 LDAP 存储库设置问题时,我试图获得更多“幕后”的理解。
(注意:这是针对密码不作为哈希值存储在自定义属性中的情况;这种情况很容易管理)
【问题讨论】:
标签: ldap
LDAP 支持用户密码的比较。您发送密码,服务器进行比较并返回真或假。这是验证用户身份的不需要登录方式。
【讨论】:
查看 WhoAmI 扩展操作 (RFC 4532)。
WhoAmI 确实有一个目的 - 验证提交的绑定凭据。它不应影响或引发任何“登录限制”(据我所知)。
WhoAmI 可以使用专用的二进制文件(例如“ldapwhoami”)来完成,或者可以使用 Net::LDAP::Extension::WhoAmI (Perl) 或其他一些支持 LDAP 操作的此类语言来完成。请注意,使用某些“搜索”功能“测试密码”是一种不明智的测试方法。
例如,如果我的 DN 是“uid=max,ou=users,dc=company,dc=com”并且我的密码是“@secret”,则可以通过 Linux 机器上的专用二进制文件来执行此操作(注意-ZZ 用于 TLS 机密性,在您的环境中可能不支持或可选):
ldapwhoami -x -w "@secret" -D uid=max,ou=users,dc=company,dc=com -ZZ -H ldap://address.of.your.ldapserver/
如果用户/通行证组合正确,则返回的答案是:
dn:uid=max,ou=users,dc=company,dc=com
如果用户/通行证组合不正确,则返回的答案(通常)是:
(49) 无效凭证
这可能意味着,正如我所说,密码和/或用户名错误,用户不存在,或者 LDAP 服务器的 ACL 被破坏,无法进行身份验证。通常情况下,用户/通行证组合输入错误,或者用户不存在。
最后,LDAPWhoAmI 操作是一种非常轻量级且简单的凭据验证方法。它也可以通过其他机制工作(例如:Kerberos Single Sign-On、Digest-MD5 等)。
【讨论】:
WhoAmIrequest 的一部分发送。 WhoAmi 操作所做的只是告诉您当前绑定的身份。因此,说它“验证提交的绑定凭据”是无稽之谈。它没有。它只是返回它们,或者只是返回用户名。进行验证的是 bind 步骤:因此它本身就足够了。在给出的示例中,ldapwhoami 首先绑定,可能会失败并显示Invalid Credentials,然后执行WhoAmI 操作。 任何 LDAP 操作都会完成。不一定是WhoAmi。
ldapwhoami -x -w "" -D <dn> -H <uri> 不会失败,尽管密码为空。所以检查[ "$?" -eq "0" ] 不会成功。 AD 只会返回一个空字符串,因此 ldapwhoami 将退出 0。
注意使用 bind 检查用户名/密码,在某些系统上它会被视为一次登录,并且由于登录限制它可能会失败。
使用比较是检查密码的更好选择。
【讨论】:
以该用户身份绑定就足够了。绑定过程中检查密码。
【讨论】: