使用SSHA-512哈希方法验证LDAP用户密码

时间:2013-07-26 09:15:52

标签: ldap openldap

我使用OpenLDAP存储用户信息。用户输入是inetOrgPerson对象。我使用Apache Directory Studio添加带有SSHA-512哈希方法的userPassword。

如何使用Java应用程序中存储在LDAP中的密码验证输入用户密码?

3 个答案:

答案 0 :(得分:3)

我找到了答案:http://gurolerdogan.blogspot.com/2010/03/ssha-encryption-with-java.html

SSHA ssha = new SSHA("SHA-512");
String sshaStr = ssha.createDigest("randomString", "mypwd");
//{SSHA}5QxZCiM/zcn0/upHX2uw6ICbgE+PLa9sJz/UpfMAMe1isyxuv+NeW4k4GjRDoTQHnB5QjCKCydJJjUQnT3DEEXJhbmRvbVN0cmluZw==
return sshaStr;

将{SSHA}替换为{SSHA-512},您将拥有一个SSHA-512密码存储在OpenLDAP中。当您创建新用户或更新用户密码时,它非常有用。

您可以改进源代码,例如将sun.misc.BASE64Encoder替换为org.apache.commons.codec.binary.Base64。

答案 1 :(得分:1)

尝试使用该用户名和密码进行绑定。 LDAP服务器将执行检查。所有LDAP实现都是如此,而不仅仅是OpenLDAP。

在JNDI中,'bind'表示使用用户名和密码构建InitialContext作为环境中的凭据,或者在现有上下文的环境中更改这些内容后发出LdapContext.reconnect()。

答案 2 :(得分:1)

  • 考虑不向目录服务器提供预编码的密码 - 这可以防止服务器检查密码质量和管理密码历史记录。使用安全连接以明文形式传输密码。将服务器配置为仅接受安全连接或拒绝非安全连接上的StartTLS以外的操作。
  • LDAP BIND操作用于更改连接的授权状态。 LDAP客户端将BIND请求发送到服务器,然后服务器将提供的凭据与用户条目中的凭证存储进行匹配,如果成功,则更改连接的授权状态。

使用example阅读UnboundID LDAP SDK