3

我正在使用 OpenLDAP 来存储用户信息。用户条目是一个 inetOrgPerson 对象。我使用 Apache Directory Studio 使用 SSHA-512 哈希方法添加 userPassword。

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

4

3 回答 3

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} 您将拥有一个存储在 OpenLDAP 中的 SSHA-512 密码。当您创建新用户或更新用户密码时,它很有用。

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

于 2013-08-01T17:47:18.937 回答
1

只需尝试使用该用户名和密码进行绑定。LDAP 服务器将进行检查。这适用于所有 LDAP 实现,而不仅仅是 OpenLDAP。

在 JNDI 中,'bind' 意味着要么使用用户名和密码构造一个 InitialContext 作为环境中的凭据,要么在现有上下文的环境中更改这些内容后发出 LdapContext.reconnect()。

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

阅读使用UnboundID LDAP SDK的示例

于 2013-07-28T10:37:08.980 回答