我正在使用 OpenLDAP 来存储用户信息。用户条目是一个 inetOrgPerson 对象。我使用 Apache Directory Studio 使用 SSHA-512 哈希方法添加 userPassword。
如何在我的 Java 应用程序中使用存储在 LDAP 中的密码验证输入的用户密码?
我找到了答案: 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} 您将拥有一个存储在 OpenLDAP 中的 SSHA-512 密码。当您创建新用户或更新用户密码时,它很有用。
您可以改进源代码,例如将 sun.misc.BASE64Encoder 替换为 org.apache.commons.codec.binary.Base64。
只需尝试使用该用户名和密码进行绑定。LDAP 服务器将进行检查。这适用于所有 LDAP 实现,而不仅仅是 OpenLDAP。
在 JNDI 中,'bind' 意味着要么使用用户名和密码构造一个 InitialContext 作为环境中的凭据,要么在现有上下文的环境中更改这些内容后发出 LdapContext.reconnect()。