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

DrS*_*ker 27 ldap

使用LDAP检查用户名/密码就像尝试绑定该用户并注明结果一样简单,或者是否有特殊的LDAP"检查密码"功能?

我正在尝试在处理凌乱的LDAP存储库设置问题时获得更多"幕后"理解.

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

geo*_*ffc 18

LDAP支持userPassword的比较.您发送密码,服务器执行比较并返回true或false.这是不需要登录方式来验证用户.

  • 能否请您提供确切的功能名称或代码,说明如何比较密码.我在类javax.naming.ldap.InitialLdapContext中找不到这样的方法 (13认同)
  • 如果LDAP服务器中的密码是加密的,您将如何"比较"? (3认同)
  • 嗯..在最近的一个问题中,我发布了http://stackoverflow.com/questions/16168293/how-to-do-password-authentication-for-a-user-using-ldap,我被建议使用bind进行搜索密码结果.绑定最新的'dn'有效.但是,绑定本质上是一种"登录".做LDAP'ldap_compare_s'失败了.有没有办法可以获得与LDAP用户密码相比较的密码? (2认同)

max*_*dap 10

查看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/
Run Code Online (Sandbox Code Playgroud)

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

DN:UID = MAX,OU =用户,DC =公司,DC = COM

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

(49)凭据无效

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

最后,LDAPWhoAmI操作是一种非常轻量级且简单的验证凭据的方法.它也可以通过其他机制工作(例如:Kerberos Single Sign-On,Digest-MD5等).

  • 用户名和密码甚至不会作为“WhoAmI”请求的一部分发送。`WhoAmi` 操作所做的只是告诉您当前绑定的身份。因此,说它“验证提交的绑定凭据”是无稽之谈。事实并非如此。它只是返回它们,或者更确切地说,只是返回用户名。执行验证的是 *bind* 步骤:因此它本身就足够了。在给出的示例中,“ldapwhoami”首先进行绑定,这可能会因“无效凭证”而失败,然后执行“WhoAmI”操作。*任何* LDAP 操作都可以完成。它不一定是“WhoAmi”。 (2认同)

小智 5

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

使用比较是仅检查密码的更好选择。

  • 使用空密码登录也算作匿名绑定,这将始终成功。 (3认同)
  • 我猜“正确”的方法取决于您要执行的操作。在编写将身份验证委托给外部目录的应用程序的常见情况下,登录限制通常是“合乎需要的”,不是吗? (2认同)