java - 无法验证 Java - LDAP

标签 java ldap opendj

我的 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/

相关文章:

active-directory - SonarQube 和 LDAP - 区分大小写的登录

asp.net - .Net 核心 : Set a user as logged in and authenticated

openam - Forgerock - OpenAM - 检索特定用户的所有有效 session

java - 如何通过 Java keytool 命令行界面生成 x.509 证书

java - 删除文件和文件夹问题

java - 在运行时更改 Spring bean 实现

java - 如何在 LDAP 中将域名转换为可分辨名称 (DN)?

java - 为什么这个正则表达式在 Java 中不能像预期的那样工作?

java - 是 ldif 还是搜索过滤器?

java - 如何在openIDM和openDJ之间进行密码同步