Mise en oeuvre de la technologie JNDI / LDAP
Quelques liens utiles
- Le guide de JavaSoft sur les JNDI
- http://java.sun.com/javase/7/docs/technotes/guides/jndi/
- Le tutorial JNDI
- http://java.sun.com/products/jndi/tutorial/
- Un tutorial LDAP (en anglais)
- http://yolinux.com/TUTORIALS/LinuxTutorialLDAP.html
- Un cours complet sur LDAP (en français)
- http://www-sop.inria.fr/.../ldap-livre.html
- JavaDoc: JNDI :
- package javax.naming,
package javax.naming.directory,
Configurer et préparer un annuaire LDAP
Compilation et installation de openldap
Si vous avez les droits d'administrateur sur votre machine, passez à la section suivante.
Commencez par récupérer la dernière version stable de openldap. Nous allons ensuite compiler et installer (en mode utilisateur) openldap. Pour ce faire, commencez par désarchiver les fichiers sources puis entrez dans le répertoire ainsi créé :
gunzip -c openldap-VERSION.tgz | tar xvfB - cd openldap-VERSION
Avant de compiler les codes sources, nous allons choisir le répertoire qui va servir de base à l'installation. Par la suite, nous appellerons ce répertoire $LDAP_DIR. Vous pouvez essayer configure -help pour voir les options possibles :
LDAP_DIR=$HOME/openldap ./configure --prefix=$LDAP_DIR
Vous pouvez maintenant compiler openldap et l'installer :
make depend make make install
Faites en sorte que les pages de manuel ainsi que les commandes soient accessibles directement :
export MANPATH=$LDAP_DIR/man:$MANPATH export PATH=$LDAP_DIR/bin:$PATH
Commencez par étudier le fichier de configuration slapd.conf du serveur openldap que se trouve dans le répertoire $LDAP_DIR/etc/openldap. Prenez soin de décommenter les lignes ci-dessous. Vous pouvez changer le DN de l'administrateur de l'annuaire LDAP et bien entendu son mot de passe.
suffix "dc=my-domain,dc=com" rootdn "cn=Manager,dc=my-domain,dc=com" rootpw secret
Lancez le démon slapd (sur un port non privilégié) et vérifiez qu'il écoute sur son port.
$LDAP_DIR/libexec/slapd -h ldap://127.0.0.1:9999 netstat -tap | grep slapd
Vous pouvez maintenant sauter la section suivante pour insérer des données dans votre annuaire LDAP.
Installation de openldap en mode administrateur
Passez en mode administrateur et prenez soin d'installer les logiciels clients et serveur de openldap.
yum list '*openldap*' yum install liste-des-packages-de-openldap
Commencez par étudier le fichier de configuration slapd.conf du serveur openldap que se trouve dans le répertoire /etc/openldap. Prenez soin de décommenter les lignes ci-dessous. Vous pouvez changer le DN de l'administrateur de l'annuaire LDAP et bien entendu son mot de passe.
suffix "dc=my-domain,dc=com" rootdn "cn=Manager,dc=my-domain,dc=com" rootpw secret
Lancez le démon slapd et vérifiez qu'il écoute sur son port.
/etc/init.d/ldap start netstat -tap | grep ldap
repassez en mode utilisateur.
Insérer des entrées
Préparez une fichier LDIF que va contenir la définition de la racine ainsi qu'une dizaine de personnes.
dn: dc=my-domain,dc=com objectclass: dcObject objectclass: organization o: Companie exemple dc: my-domain dn: cn=userA,dc=my-domain,dc=com objectclass: person cn: userA sn: essaiSN userPassword: bidon telephoneNumber: xx-xx-xx-xx-xx description: l'utilisateur AA dn: cn=userB,dc=my-domain,dc=com objectclass: person cn: userB sn: essaiSN userPassword: bidon telephoneNumber: xx-xx-xx-xx-xx description: l'utilisateur BB ...
Insérez ces entrées dans la base LDAP avec la commande ldapadd :
Attention : Si vous avez lancé le démon slapd en tant qu'utilisateur ordinaire, vous devez ajouter à la ligne de commande précédente l'option « -H URL-du-serveur » c'est à dire
Dans un deuxième temps, et pour vous permettre de tester des requêtes de recherche plus sophistiquées, insérez une autre poigné d'entrées qui vous allez rattacher à l'une des personnes. L'arbre LDAP doit ressembler à ceci :
dc=my-domain,dc=com
cn=userA,dc=my-domain,dc=com
cn=userB,dc=my-domain,dc=com
cn=userC,dc=my-domain,dc=com
sn=salut,cn=userC,dc=my-domain,dc=com
sn=bye,cn=userC,dc=my-domain,dc=com
sn=bonjour,cn=userC,dc=my-domain,dc=com
cn=userD,dc=my-domain,dc=com
Rechercher des entrées
Sur cet annuaire, effectuez plusieurs recherches avec la commande ldapsearch :
Par exemple :
- cherchez les personnes,
- cherchez les personnes dont le CN commence par « a » ou le SN contienne « b »,
Pour tester des exemples plus importants, vous pouvez interroger (à partir du serveur sol.dil.univ-mrs.fr uniquement) l'annuaire LDAP de l'Université :
ldapsearch -h annuaire.univmed.fr -b ou=people,dc=univmed,dc=fr -x '(uid=massat)'
Utiliser un navigateur
Afin de faciliter l'exploitation et la modification de l'annuaire LDAP, nous allons utiliser un logiciel de navigation LDAP (LDAP Browser). Vous pouvez aussi le récupérer et le tester sur votre annuaire. Profitez de ce Browser pour tester les requêtes précédentes et insérer de nouvelles informations.
Une autre possibilité consite à utiliser JXplorer un navigateur LDAP écrit en JAVA dont l'ergonomie est plus agréable. Dans ce dernier cas, les informations sont présentées sous la forme de pages HTML.
Créer une nouvelle classe d'objet
Les schémas du serveur LDAP se trouvent dans le répertoire /etc/openldap/schema (ou $LDAP_DIR/etc/openldap/schema). Créez un schéma vide (nouveau.schema) est placez à l'intérieur la définition de la classe d'objet personTelephone qui hérite de la classe person et dans laquelle le numéro de téléphone est obligatoire. Placez au début du fichier de configuration de slapd l'inclusion de votre nouveau schéma. Redemarrez le serveur LDAP.
Testez ensuite dans le navigateur la création de nouvelles entrées basées sur la classe personTelephone. Pour ce faire, vous devez créer un « Template » avec le menu « edit ».
Utiliser JNDI
Commencez par récupérer les providers de JNDI et préparez le CLASSPATH pour utiliser l'ensemble des fournisseurs d'accès aux annuaires. Dans ce package il y a un logiciel de démonstration que vous pouvez tester. Vous pouvez consultez la page officielle des fournisseurs de services JNDI.
Lister les utilisateurs NIS
Écrivez un peut programme Java (en vous basant sur les transparents du cours) qui commence par lister les utilisateurs NIS du département puis leurs attributs. Le domaine NIS est « dil.univ-mrs.fr » et le serveur NIS est « sol.dil.univ-mrs.fr ». N'oubliez par de lire la documentation du fournisseur d'accès NIS. Vous pouvez limiter cet affichage en ne gardant que les utilisateurs dont le login contient un « a » ;). Attention : pour tester cet exemple, vous devez être sur une des machines du réseau du DIL ou directement sur le serveur (à cause du firewall entre le réseau ISL et le réseau DIL).
Lister les entrées LDAP
Faites de même pour votre annuaire LDAP et modifiez le ScopeSearch pour limiter votre recherche à 4 entrées seulement.
Sauvegarde d'objet Java dans un annuaire LDAP
Si vous avez un peu de courage vous pouvez suivre les deux leçons présentes dans le tutorial JNDI :
- Stockage d'objets Java dans un Annuaire (version Serializable),
- Récupération d'objets Java dans un Annuaire (version Serializable),
Vous devez suivre les étapes ci-dessous :
- Prévoir un classe simple pour coder une personne et rendre cette classe sérialisable (elle implante l'interface Serializable).
- Inclure dans le fichier de configuration du serveur LDAP le schéma « java ».
- Lire attentivement la documentation du provider LDAP (fichiers jndi-ldap.html et jndi-ldap-gl.html).
- Utiliser de préférence la version de la méthode bind à trois arguments. le dernier permet d'ajouter des attributs au noeud que nous allons insérer. Pour coder ces attributs, vous pouvez utiliser la classe BasicAttributes.
- Vous pouvez utiliser le même principe pour ajouter des noeuds quelconques à base d'attributs (deuxième argument de la méthode bind égale à null).