Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1822 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Authentification avec LDAP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Authentification avec LDAP

n°1629850
Trailx ori​ginal
Posté le 24-10-2007 à 10:17:19  profilanswer
 

Bonjour,
 
 
J'ai une application Java qui nécessite un login et mot de passe. En fonction du login et mot de passe, certaines fonctions seront accesibles.
J'aimerai utiliser un annuaire LDAP pour effectuer cette authentification.
 
 
Arbre LDAP : GID+UID+PASSWORD+DROITS (correspondants au GID et à l'UID)
 
 
1) Comment créer mon arbre LDAP ? exemple de fichier ldiff si possible  :jap:  
 
2) Comment interconnecter mon application java et mon annuaire LDAP (jndi,jldap) ?
 
Merci d'avance  [:spikler]  

mood
Publicité
Posté le 24-10-2007 à 10:17:19  profilanswer
 

n°1630380
BifaceMcLe​OD
The HighGlandeur
Posté le 24-10-2007 à 17:22:11  profilanswer
 

[:alkatraz]
L'API d'accès à LDAP fait partie de JavaSE (depuis la version 1.3) avec les package javax.naming et javax.naming.directory
 
2 secondes sur Google et tu auras un exemple de code (par exemple chez Developpez!)

n°1630458
Trailx ori​ginal
Posté le 24-10-2007 à 20:16:10  profilanswer
 

Effectivement, je ne savais pas.
 
Donc maintenant j'arrive à me connecter à ma base ldap et lister son contenu. Par contre j'ai eu besoin de ceci :

Code :
  1. ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );


 mais je n'ai pas compris à quoi servait ce Initial_Context  :(  
 
Le problème est donc en partie résolu pour la partie java.
Maintenant il s'agit de créer l'arbre ldap pour faire l'authentification  [:arhendal]

n°1630467
torpi
Au travail !!!
Posté le 24-10-2007 à 20:31:36  profilanswer
 

J'avais utilisé ce tuto pour apprendre un peu a utiliser JNDI :
 
http://www.jmdoudoux.fr/java/dej/chap034.htm
 
cf partie 34.2.2 pour ta question sur le contexte initial.
 
Et pour l'authentification, tu dois créer un objet personne dans l'annuaire qui contiendra plusieurs attributs dont les suivants:
-uid
-password  
 
(Tu peux utiliser les classes standards LDAP prédéfinies comme la classe person ou une classe dérivée)
 
Si ton annuaire LDAP ne te servira que pour une appli, tu peux stocker les droits directement comme un attribut (multivalué) de ton objet personne.
Sinon, c'est plus compliqué si tu veux faire ca de manière élégante en généralisant pour un nombre quelconque d'applis.


Message édité par torpi le 24-10-2007 à 21:10:57
n°1630784
Trailx ori​ginal
Posté le 25-10-2007 à 11:35:51  profilanswer
 

Fort instructif, le cours de jmdoudoux, une vrai bible  :love:  
 
Pour l'authentification, j'ai crée un objet person comme tu me l'a indiqué.
Par contre pour l'authentification, je n'ai pas compris ce que tu entends par attribut multivalué ?
 
Je pensai créer mes personnes d'un coté et d'un autre mes roles . Le problème est de faire une liaison entre la personne et son role , je n'ai pas trouvé l'attribut commun ...

n°1630834
torpi
Au travail !!!
Posté le 25-10-2007 à 12:28:32  profilanswer
 

Tout le problème est dans la liaison, en fait :)
 
Voilà encore un lien http://articles.mongueurs.net/maga [...] mag65.html
 
Regarde particulièrement la section "Liens entre données".

n°1630866
Trailx ori​ginal
Posté le 25-10-2007 à 13:25:56  profilanswer
 

Effectivement, je ne trouve pas comment lier mes users et mes roles (pas d'attributs commun)  
 
Pour le moment je pourrai lier eventuellement mes personnes et roles en liant OU des personnes à l' OU de mes roles mais du coup ca me fait presque créer une OU pour chaque personne :s  
 
Je pense que quelque chose m'échappe etant donné qu'il s'agit d'un annuaire. Cela devrait etre evident de lier un utilisateur à un groupe ...
 
D'autre part je ne sais quel ObjectClass utilisé pour mes roles...
Exemple de roles: ajouter un binaire, créer une playlist...

n°1630888
torpi
Au travail !!!
Posté le 25-10-2007 à 14:04:05  profilanswer
 

Tu peux utiliser pour tes groupes la classe groupOfUniquesNames :
 
http://www-03.ibm.com/servers/eser [...] Names.html
 
En LDIF-like pour le role AjoutBinaire cela donne :
 
cn=AjoutBinaire
uniqueMember:uid=toto,ou=people,dc=...
uniqueMember:uid=titi,ou=people,dc=...
 
 
Tu utilises l'attribut uniqueMember pour figurer les dn des personnes qui ont ce role (Ici les utilisateurs toto et titi).

n°1633159
Trailx ori​ginal
Posté le 29-10-2007 à 17:49:52  profilanswer
 

Super, j'ai maintenant un arbre qui me convient grâce à ta méthode ;)  merci bien
 
Maintenant pour faire plus propre, j'intègre ça dans mon code Java. Malheureusement petit soucis  :D  
 
J'aimerai que mon code insère un nouvel users avec ces attributs (juste username ici).
 

Code :
  1. public void createNew() {
  2.         String username ="programmeur2";
  3.     try {
  4.       String distinguishedName = "dc=projet,dc=fr";
  5.       Attributes newAttributes = new BasicAttributes(true);
  6.       Attribute crn = new BasicAttribute("objectclass" );
  7.       crn.add("top" );
  8.       crn.add("organizationalUnit" );
  9.       crn.add("ou" );
  10.       crn.add("demo" );
  11.       newAttributes.put(crn);
  12.      
  13.       newAttributes.put(new BasicAttribute("cn", username));
  14.       ldapContext.createSubcontext(distinguishedName, newAttributes);
  15.     }
  16.     catch (Exception e) {
  17.       System.out.println("create error: " + e);
  18.       e.printStackTrace();
  19.       System.exit(-1);
  20.     }


 
L'erreur retournée : javax.naming.directory.InvalidAttributeValueException: [LDAP: error code 21 - objectclass: value #2 invalid per syntax];


Message édité par Trailx original le 29-10-2007 à 19:00:59
n°1634921
torpi
Au travail !!!
Posté le 31-10-2007 à 19:56:11  profilanswer
 

Tu as défini les classes "ou" et "demo" dans le schéma de l'annuaire ?
 
Essaie de créer ton objet sans les deux dernieres classes pour voir ...

mood
Publicité
Posté le 31-10-2007 à 19:56:11  profilanswer
 

n°1636034
Trailx ori​ginal
Posté le 03-11-2007 à 13:15:10  profilanswer
 

Effectivement, je n'avais pas respecter la structure de mon arbre au niveau des objets  :whistle:  
 
Maintenant j'arrive a creer mon arbre (objets et attributs) avec mon code java... Seulement, je n'arrive pas à faire du "multi-values" pour l'uid de groupOfUniquesNames  :(  
 
J'arrive à ajouter des objets (qui n'existent pas dans mon arbre) ou modifier des attributs  mais impossible de donner 2 valeurs a un attribut :(  
 
uniqueMember:uid=toto,ou=people,dc=...  
uniqueMember:uid=titi,ou=people,dc=...  
 
 
Une idée ?
 
EDIT: l'attribut password de l'objet inetOrgPerson ne fonctionne pas, j'arrive pas lui passer un mot de passe, il y'a une syntaxe précise à respecter genre MD5{pass ?


Message édité par Trailx original le 03-11-2007 à 17:49:15
n°1637660
torpi
Au travail !!!
Posté le 06-11-2007 à 14:55:52  profilanswer
 

Pour donner deux valeurs a un attribut, tu procèdes bien de la même manière que pour l'attribut "objectclass" (cf. plus haut) ?
 
Essaye ca sinon ...
 

Code :
  1. import javax.naming.directory.ModificationItem;
  2. String[] values = {"uid=toto,ou=people,dc=...","uid=titi,ou=people,dc=..."};
  3. ModificationItem[] modificationItem = new ModificationItem[2];
  4. for (int i = 0; i < 2; i++) {
  5. BasicAttribute attr = new BasicAttribute("uniqueMember" );
  6. attr.add(values[i]);
  7. modificationItem[i] = new ModificationItem(DirContext.ADD_ATTRIBUTE, attr);
  8. }
  9. ctx.modifyAttributes(dn_de_ton_role, modificationItem);


 
Et pour le password, je crois qu'on le passe en clair; le serveur se chargeant de le crypter (dans ton exemple, en utilisant MD5 comme fonction de hachage).


Message édité par torpi le 06-11-2007 à 15:15:38

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Authentification avec LDAP

 

Sujets relatifs
Interopérabilité Java .NETtrouver taille du heap java
[résolu] Recherches parallèles LDAP[Résolu] Envoyer mail en perl avec authentification
Qui sait changer la version du compilateur Java Studio Creator 2.Authentification composant login
[Java] JTree -> récupérer un noeud par son userObject ?Executer du code C++ depuis JAVA
Executer du Java par Asp[Java / Servlet] Nom de fichiers french-like sous linux
Plus de sujets relatifs à : [JAVA] Authentification avec LDAP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR