我的 ldiff 文件如下所示
dn:uid=test,ou=users,dc=example,dc=com
objectclass:person
objectclass:inetOrgPerson
objectclass:organizationalPerson
objectclass:top
givenName: test
title:test
uid:test
cn:test
sn:sdf
userPassword: 81dc9bdb52d04dc20036dbd8313ed055
mail: test@yopmail.com
creatorsName: cn=Directory Manager,cn=Root DNs,cn=config
modifiersName: cn=Directory Manager,cn=Root DNs,cn=config
用户密码在门户数据库中使用 MD5 和十六进制编码进行哈希处理。 还启用了预编码密码为 true 但没有帮助。
上述 userPassword 的纯文本密码是“1234”,我有一个示例 java 程序来验证相同的密码
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 = "81dc9bdb52d04dc20036dbd8313ed055;
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);
}
替换java程序中的userPassword总是给出“无效的身份验证异常”
附件是OpenDJ的设置 OPENDJ Passpword policy
我的要求是我们有一个门户,其密码以十六进制编码的 MD5 形式存储在数据库中,门户集成到 ldap,每次密码更改时 ldap 都会使用哈希值更新,但上面的 java 程序根本不起作用。 需要认真的帮助。
谢谢。
最佳答案
您需要以二进制格式存储密码哈希。您可以在 LDIF 文件中使用“::”而不是“:”来分隔属性名称和值:
dn:uid=test,ou=users,dc=example,dc=com
objectclass:person
objectclass:inetOrgPerson
objectclass:organizationalPerson
objectclass:top
givenName: test
title:test
uid:test
cn:test
sn:sdf
userPassword:: 81dc9bdb52d04dc20036dbd8313ed055
mail: test@yopmail.com
creatorsName: cn=Directory Manager,cn=Root DNs,cn=config
modifiersName: cn=Directory Manager,cn=Root DNs,cn=config
关于java - 无法验证 Java - LDAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39872257/