我面臨的問題需要儘快解決,需要您的幫助。Java LDAP - 無法對用戶進行身份驗證
我有一個很簡單的Java程序只是爲LDAP用戶的樣本認證
問題-1 - :
public static void main(String[] args) throws NamingException {
final String ldapAdServer = "ldap://0.0.0.0:389";
final String ldapUsername = "uid=test,ou=People,dc=example,dc=com";
final String ldapPassword = "gdyb21LQTcIANtvYMT7QVQ==";
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put(Context.SECURITY_AUTHENTICATION, "simple");
if (ldapUsername != null) {
env.put(Context.SECURITY_PRINCIPAL, ldapUsername);
}
if (ldapPassword != null) {
env.put(Context.SECURITY_CREDENTIALS, ldapPassword);
}
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapAdServer);
env.put("java.naming.ldap.attributes.binary", "objectSID");
DirContext ctx = new InitialDirContext(env);
}
運行上述程序給出「[LDAP:錯誤代碼49 - 無效證書]「錯誤,我也採取了導出ldap用戶和用戶密碼是相同的程序中輸入
dn: uid=test,ou=People,dc=example,dc=com objectClass: person objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: top uid: test mail: [email protected] userPassword: {MD5}gdyb21LQTcIANtvYMT7QVQ==
我上面輸入的密碼和java代碼一樣都是拋出錯誤我已經使用dsconfig並配置了「default-password-storage-scheme」來使用MD5,當我給出簡單的密碼時,將MD5十六進制密碼傳遞給ldap以獲得認證。
發出─2-: 我們使用的Liferay作爲後端系統,所有用戶都必須的細節,如果用戶更改密碼的Liferay正在生成MD5和十六進制編碼這樣的事情「098f6bcd4621d373cade4e832627b4f6 」密碼存儲在LDAP但當使用export ldiff選項導出時,我們在ldap「{MD5} gdyb21LQTcIANtvYMT7QVQ ==」中出現了類似的情況,liferay和ldap生成的密碼之間存在不匹配。我想要使用liferay md5密碼進入ldap。 再次輸入從ldiff文件獲得的相同密碼並將其放在java程序中似乎不起作用,並且明文密碼可以正常工作。
需要嚴肅的幫助。
如果需要任何其他信息,請隨時留言。
嗨,感謝您對issue1的即時響應,我們已經有超過40萬的用戶將從liferay db導入到ldap中,並且他們的密碼將被散列現在我該如何處理這種情況liferay使用MD5與十六進制對於二進制格式,你的意思是base64編碼? – ravicandy1234