我在解决如何将 Apache DS LDAP 中的密码保存在 SSHA 哈希而不是纯文本中时遇到问题。据我所知,正确的方法应该是将 Apache DS 配置为使用 SSHA 存储密码,然后在设置密码时仅发送纯文本。但是,我不知道如何配置 Apache DS 来执行此操作。
我已将散列密码推送到 LDAP(使用 LDAP 的管理界面)并且 Apache DS 正确地根据正确的密码进行身份验证。但是我需要从我们的 Java 应用程序中插入密码。这不可能是一个不寻常的请求,所以我一定遗漏了一些东西。
这是我使用 org.springframework.ldap.core 的 LdapTemplate 接口从 java 设置密码的代码
public void storeNewPassword(final String userId, final String password) {
final DistinguishedName dn = new DistinguishedName("dc=users,dc=pms,dc=com");
dn.add("uid", userId);
Attribute pass = new BasicAttribute("userpassword", password);
final ModificationItem mi = new ModificationItem(
DirContext.REPLACE_ATTRIBUTE,
pass);
ldapTemplate.modifyAttributes(dn, new ModificationItem[] {mi});
}
上面的代码正确设置了密码,但是当我查看 Apache DS 服务器时,我看到密码已以纯文本形式保存:
请有人验证这是否是设置密码的正确方法,并建议我如何配置 Apache DS 以将 SSHA 应用于它收到的密码。
谢谢