簡體   English   中英

從Spring在LDAP中設置SSHA密碼

[英]Setting a SSHA Password in LDAP from Spring

我在解決如何使用SSHA哈希而不是純文本在Apache DS LDAP中保存密碼時遇到問題。 據我所知,正確的方法應該是配置Apache DS以使用SSHA存儲密碼,然后在設置密碼時只發送純文本。 但是,我無法弄清楚如何配置Apache DS來執行此操作。

我已將Hashed密碼推送到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 Server時,我發現密碼已經以純文本格式保存:

請有人驗證這是否是設置密碼的正確方法,並建議我如何配置Apache DS以將SSHA應用於它接收的密碼。

謝謝

您作為客戶端負責對密碼進行哈希和編碼。 服務器只是像任何其他屬性一樣存儲它。

如果要使用MD5散列密碼,可以使用以下代碼:

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;

public class PasswordUtil {
  public String hashAndEncodePassword(String password) {
    final byte[] md5 = DigestUtils.md5(password.trim().getBytes("UTF-8"));
    final byte[] base64 = Base64.encodeBase64(md5);
    final String hashedAndEncoded = new String(base64, "ASCII");
    return "{MD5}" + hashedAndEncoded;
  }
}

如果要使用其他哈希算法,則必須將DigestUtils.md5的使用DigestUtils.md5為正確的方法。

如果你想使用像{SSHA}這樣的鹽漬算法,你也必須調整代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM