2016-10-05 1 views
1

Mon fichier ldiff ressemble à ceciImpossible d'authentifier Java - 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 

Le userPassword est haché dans le portail db en utilisant MD5 avec le codage hexadécimal. Également activé le mot de passe pré-encodé à vrai mais n'aide pas.

Le mot de passe de texte brut pour le userPassword ci-dessus est « 1234 » et j'ai un programme java exemple pour authentifier le même

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

    } 

Remplacement du userPassword dans le programme java donne toujours « Exception d'authentification non valide »

Ci-joint le réglage de OpenDJ OPENDJ Passpword policy

Mon exigence est que nous avons un portail dont les mots de passe est stocké dans db dans MD5 avec hex codant pour le portail est l'intégration d à ldap pour chaque changement de mot de passe le ldap est mis à jour avec la valeur hachée, mais le programme java ci-dessus ne fonctionne pas du tout. Besoin d'aide sérieuse.

Merci.

Répondre

0

Vous devez stocker le mot de passe de hachage au format binaire. Vous pouvez le faire dans un fichier LDIF en utilisant « :: » au lieu de « : » pour séparer le nom d'attribut de la valeur:

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

En OpenDJ, lorsque vous ajoutez ou importez un mot de passe, le serveur ne conserver une version hachée de celui-ci, et pour cela, il utilise le schéma de stockage de mot de passe configuré dans la politique de mot de passe pour les utilisateurs (ou la politique d'importation). Toutefois, il calcule toujours le hachage à moins qu'il ne détecte que le mot de passe a déjà été haché avec un schéma connu. Les schémas sont identifiés par un préfixe tel que {SSHA1} ou {MD5}. Puisque le mot de passe pour votre utilisateur est déjà haché avec MD5 et que OpenDJ a un schéma qui utilise le hash MD5, vous devez vous assurer que le mot de passe de l'utilisateur a la même représentation que ce que OpenDJ produit ou attend.

Le format est le suivant:

userPassword: {MD5} Base64EncodingOftheMD5Hash

Une fois que vous avez tous les mots de passe de l'utilisateur avec ce format LDIF, vous pouvez ajouter ou les importer dans OpenDJ, mais assurez-vous vous définissez la politique de mot de passe pour accepter les mots de passe pré-encodés (allow-pre-encoded-passwords) car ce n'est pas la valeur par défaut.

Vous pouvez générer des valeurs codées échantillons en utilisant l'outil encode-mot de passe OpenDJ:

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