我面临的问题需要尽快解决,需要您的帮助。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