2016-10-05 3 views
1

Meine ldiff Datei sieht wie folgt auskann nicht Java zur Authentifizierung - LDAP

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: [email protected] 
creatorsName: cn=Directory Manager,cn=Root DNs,cn=config 
modifiersName: cn=Directory Manager,cn=Root DNs,cn=config 

Das Userpassword in Portal db mit MD5 mit Hex-Codierung gehasht wird. Auch aktiviert pre-encoded-password zu true aber nicht hilft.

Das Klartext-Passwort für das oben Userpassword „1234“ und ich habe ein Programm Java-Beispiel die gleichen

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); 

    } 

Ersetzen das Userpassword im Java-Programm zur Authentifizierung immer „Invalid Authentication Exception“

gibt

Beigefügt ist die Einstellung von OpenDJ OPENDJ Passpword policy

Meine Forderung ist haben wir ein Portal, deren Kennwörter in db in MD5 mit hex gespeichert integrieren das Portal kodiert, d zum ldap für jede Passwortänderung wird der ldap mit Hashwert aktualisiert, aber das obige Java-Programm funktioniert überhaupt nicht. Brauchen Sie ernsthafte Hilfe.

Danke.

Antwort

0

Sie müssen den Passwort-Hash im Binärformat speichern. Sie können mit diesem in einer LDIF-Datei tun „::“ statt „:“ von dem Wert der Attributnamen zu trennen:

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: [email protected] 
creatorsName: cn=Directory Manager,cn=Root DNs,cn=config 
modifiersName: cn=Directory Manager,cn=Root DNs,cn=config 
0

In OpenDJ, wenn Sie hinzufügen oder ein Passwort importieren, wird der Server nur eine gehashte Version davon beibehalten, und dafür verwendet es das Passwortspeicherschema, das in der Kennwortrichtlinie für Benutzer (oder die Importrichtlinie) konfiguriert ist.

Es berechnet jedoch immer den Hash, es sei denn, es erkennt, dass das Kennwort bereits mit einem bekannten Schema hashed ist. Schemata werden durch ein Präfix wie {SSHA1} oder {MD5} identifiziert.

Da das Kennwort für Ihren Benutzer bereits mit MD5 gehasht wurde und OpenDJ ein Schema hat, das mit MD5 hasht, sollten Sie sicherstellen, dass das Benutzerkennwort dieselbe Darstellung wie OpenDJ hat oder erwartet.

Das Format ist:

userpassword: {MD5} Base64EncodingOftheMD5Hash

Nachdem Sie alle Benutzer-Passwörter mit diesem Format in LDIF haben, können Sie hinzufügen oder sie in OpenDJ importieren, aber stellen Sie sicher, Sie legen die Kennwortrichtlinie fest, um vorcodierte Kennwörter (allow-pre-encoded-passwords) zu akzeptieren, da dies nicht der Standardwert ist.

Sie können Probe codierte Werte mit OpenDJ encode-Passwort-Tool generieren:

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