我的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进行哈希处理。 还启用了预编码密码为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总是会出现“Invalid Authentication Exception”
附件是OpenDJ的设置 OPENDJ Passpword policy
我的要求是我们有一个门户网站,其密码存储在MD5中的db中,并使用十六进制编码将门户网站集成到ldap,每次更改密码,ldap都使用散列值更新,但上述java程序根本不起作用。 需要认真的帮助。
感谢。
答案 0 :(得分:0)
您需要以二进制格式存储密码哈希。您可以在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
答案 1 :(得分:0)
在OpenDJ中,当您添加或导入密码时,服务器将仅保留其密码版本,为此,它使用密码策略中为用户配置的密码存储方案(或导入策略)。 / p>
但是,除非检测到密码已经使用已知方案进行了哈希处理,否则它始终会计算哈希值。方案由{SSHA1}
或{MD5}
等前缀标识。
由于您的用户的密码已经使用MD5进行了哈希处理,并且OpenDJ具有使用MD5进行哈希处理的方案,因此您应该确保用户密码与OpenDJ产生或期望的代码具有相同的表示。
格式为:
userPassword:{MD5} Base64EncodingOftheMD5Hash
在LDIF中拥有此格式的所有用户密码后,您可以在OpenDJ中添加或导入它们,但请确保将密码策略设置为接受预先编码的密码(allow-pre-encoded-passwords
),因为它&#39;不是默认值。
您可以使用OpenDJ编码密码工具生成示例编码值:
$ encode-password -s MD5 -c password
Encoded Password: "{MD5}X03MO1qnZdYdgyfeuILPmQ=="