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 :

ldapadd -x -D "DN-administrateur" -W -f fichier-LDIF

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

ldapadd -H ldap://127.0.0.1:9999 -x -D "DN-administrateur" -W -f fichier-LDIF

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 :

ldapsearch -x -D "DN-administrateur" -W -b DN-de-la-base-de-recherche filtre

Par exemple :

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 :

Vous devez suivre les étapes ci-dessous :

  1. Prévoir un classe simple pour coder une personne et rendre cette classe sérialisable (elle implante l'interface Serializable).
  2. Inclure dans le fichier de configuration du serveur LDAP le schéma « java ».
  3. Lire attentivement la documentation du provider LDAP (fichiers jndi-ldap.html et jndi-ldap-gl.html).
  4. 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.
  5. 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).