Ldap 如何检查用户名/密码组合?

Ldap 如何检查用户名/密码组合?,ldap,Ldap,使用LDAP检查用户名/密码就像尝试与该用户绑定并记录结果一样简单,还是有一个特殊的LDAP“检查密码”功能 在处理一个混乱的LDAP存储库设置问题时,我试图获得更多的“幕后”理解 (注意:这适用于密码未作为散列存储在自定义属性中的情况;这种情况易于管理)绑定该用户即可。在绑定过程中检查密码。LDAP支持用户密码的比较。发送密码后,服务器进行比较并返回true或false。这是一种不需要登录方式来验证用户身份的方法 注意使用bind检查用户名/密码,在某些系统上它将被视为登录,并且由于登录限制,

使用LDAP检查用户名/密码就像尝试与该用户绑定并记录结果一样简单,还是有一个特殊的LDAP“检查密码”功能

在处理一个混乱的LDAP存储库设置问题时,我试图获得更多的“幕后”理解


(注意:这适用于密码未作为散列存储在自定义属性中的情况;这种情况易于管理)

绑定该用户即可。在绑定过程中检查密码。

LDAP支持用户密码的比较。发送密码后,服务器进行比较并返回true或false。这是一种不需要登录方式来验证用户身份的方法

注意使用bind检查用户名/密码,在某些系统上它将被视为登录,并且由于登录限制,它可能会失败


使用compare是检查密码的更好选项。

查看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机密性,在您的环境中可能不支持或可选):

如果用户/通行证组合正确,则返回的答案为:

dn:uid=max,ou=users,dc=company,dc=com

如果用户/通行证组合不正确,则返回的答案是(通常):

(49)无效凭证

正如我所说,这可能意味着密码和/或用户名错误,用户不存在,或者LDAP服务器的ACL被破坏,无法进行身份验证。通常情况下,是用户/密码组合输入错误,或者用户不存在


最后,LDAPWhoAmI操作是一种非常轻量级且简单的凭证验证方法。它还可以通过其他机制工作(例如:Kerberos单点登录、Digest-MD5等)。

此外,使用空密码登录也可以算作匿名绑定,这将始终成功。我想“正确”的方法取决于您尝试执行的操作。在编写一个将身份验证委托给外部目录的应用程序的常见情况下,登录限制通常是可取的,不是吗?我不知道“检查密码”和“登录”之间可能有什么区别,或者更确切地说,为什么您希望在没有另一个的情况下执行其中一个@geoffc只有在服务器配置为允许匿名绑定的情况下,匿名绑定才会成功。如果LDAP服务器中的密码已加密,您将如何“比较”?@Ashwinkumar有一个特定的函数来进行密码比较。您提供用于测试的密码,它同样加密,然后您可以比较这两个值。区别在于尝试与这些cred绑定,还是显式调用ldapCompare函数.hmm。。在我最近发布的一个问题中,有人建议我对搜索结果使用bind和密码。与最新的“dn”作品绑定。然而,绑定本质上是一个“登录”。执行LDAP“LDAP\u比较”失败。是否有一种方法可以将密码与LDAP用户的密码进行比较?请提供确切的函数名或代码,说明如何比较密码。我在类javax.naming.ldap.InitialLdapContextHere中找不到这样的方法。有关与此概念相关的规范的更多信息--。不知道它被广泛采用的程度!Dovecot IMAP服务器中甚至有这样一个用例:用户名和密码甚至不作为
WhoAmI
请求的一部分发送。所有
WhoAmi
操作所做的就是告诉您当前绑定为谁。因此,说它“验证提交的绑定凭据”是毫无意义的。没有。它只返回它们,或者更确切地说,只返回用户名。进行验证的是绑定步骤:因此,仅此一步就足够了。在给定的示例中,
ldapwhoami
首先绑定,这可能会因
无效凭据而失败,然后执行
WhoAmI
操作。任何LDAP操作都可以完成。它不必是
WhoAmi
ldapwhoami -x -w "@secret" -D uid=max,ou=users,dc=company,dc=com -ZZ -H ldap://address.of.your.ldapserver/