繁体   English   中英

无法验证Java - LDAP

[英]Unable to authenticate Java - LDAP

我的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在门户网站数据库中对userPassword进行哈希处理。 还启用了pre-encoded-password为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密码策略的设置

我的要求是我们有一个门户网站,其密码存储在MD5中的db中,并使用十六进制编码将门户网站集成到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

在OpenDJ中,当您添加或导入密码时,服务器将仅保留其密码版本,为此,它使用密码策略中为用户配置的密码存储方案(或导入策略)。

但是,除非检测到密码已经使用已知方案进行了哈希处理,否则它始终会计算哈希值。 方案由{SSHA1}{MD5}等前缀标识。

由于您的用户的密码已经使用MD5进行了散列,并且OpenDJ具有使用MD5进行哈希处理的方案,因此您应确保用户密码与OpenDJ生成或期望的密码具有相同的表示形式。

格式为:

userPassword:{MD5} Base64EncodingOftheMD5Hash

在LDIF中拥有此格式的所有用户密码后,您可以在OpenDJ中添加或导入它们,但请确保将密码策略设置为接受预编码密码( allow-pre-encoded-passwords ),因为它不是默认allow-pre-encoded-passwords

您可以使用OpenDJ encode-password工具生成示例编码值:

$ encode-password -s MD5 -c password
Encoded Password:  "{MD5}X03MO1qnZdYdgyfeuILPmQ=="

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM