LDAP : Une présentation rapide

Quelques liens utiles

JNDI chez Oracle
Guide JNDI
Le tutorial JNDI
package javax.naming
package javax.naming.directory
Un cours complet sur LDAP (en français)
http://www-sop.inria.fr/.../ldap-livre.html
Un tutorial LDAP (en anglais)
http://yolinux.com/TUTORIALS/LinuxTutorialLDAP.html

Présentation de LDAP

LDAP : Lightweight Directory Access Protocol.

  • C'est un protocole d'accès à un annuaire.
    • Il n'y a donc pas de contrainte d'implantation.
    • Un annuaire propriétaire peut (et doit) fournir une interface LDAP (comme ODBC pour les S.G.B.D.R.).
  • Il existe des annuaires LDAP natifs (openLDAP).

Caractéristiques de LDAP

Caractéristiques :

  • Accès rapide mais mises à jour plus lentes
  • Structure arborescente
  • Langage de recherche
  • l'échange de données se fait par le format LDIF
    Annuaire    Requête    Fichier     Ajout     Annuaire
      LDAP      ------>     LDIF      ------>      LDAP
    
  • Il existe des opérations de duplication et de synchronisation
  • Il est donc facile de maintenir des copies

Utilisation de LDAP

Quelques exemples :

  • Annuaire d'entreprise,
  • Annuaire Active Directory (Windows 2000).
  • Alternative à NIS et NIS+.
  • Représentation des paramètres du Système d'Information (J2EE).
  • Annuaire de l'université (http://annuaire.univ-amu.fr).

Structure de LDAP

Un annuaire LDAP est un arbre (DIT pour Directory Information Tree).

Chaque noeud corresponds à une série d'affectations d'attributs.

  • On associe une ou plusieurs valeurs à chaque attribut.
  • Les valeurs sont des chaînes de caractères ou des données binaires.
  • Exemples :
dn: dc=my-domain,dc=com
objectclass: dcObject
objectclass: organization
o: Ma première organisation
dc: my-domain
dn: cn=massat,dc=my-domain,dc=com
objectclass: person
cn: massat
sn: Jean-Luc Massat
description: Enseignant au DIL

L'attribut particulier dn

dn pour distinguished name.

Le DN est l'identifiant d'une entrée LDAP. C'est un chemin dans l'arborescence de l'annuaire.

dc=youpi,dc=com
 | dc=magasin,dc=youpi,dc=com
 |  | user=jean,dc=magasin,dc=youpi,dc=com
 |  | user=bob,dc=magasin,dc=youpi,dc=com
 |  | ...
 | dc=usine,dc=youpi,dc=com
 |  | user=jean,dc=usine,dc=youpi,dc=com
 |  | user=marcel,dc=usine,dc=youpi,dc=com
 |  | ..

L'attribut particulier objectclass

L'attribut objectclass désigne la ou les classes associées au noeud.

Une classe définie les attributs obligatoires et optionnels d'un noeud.

Les attributs et les classes sont définis dans des schémas LDAP.

Dans un serveur LDAP il existe un jeu de schémas de base qui définissent des classes et des attributs.

dn: dc=my-domain,dc=com
objectclass: dcObject
objectclass: organization
...
dn: cn=massat,dc=my-domain,dc=com
objectclass: person
..

Les attributs classiques

cn Le common name ou nom commum.

gn given name c'est à dire le prénom.

sn surname.

l Le locality name.

st state or province name.

ou organisational unit.

dc domain component.

o organization name.

Le langage de requête

  • Les tests élémentaires de la valeur d'un attribut :
    (attribut=valeur) égalité
    (attribut~=valeur) approximation
    (attribut!=valeur) différence
    (attribut>=valeur) supérieur
    (attribut<=valeur) inférieur
  • La valeur peut être une chaîne combinée au caractère joker * et au symbole de neutralisation \c. Exemples :
    (cn=user1*) cn débute par user1
    (cn=*) cn a une valeur
  • Les conditions élémentaires peuvent être composées :
    (|(cond1)(cond2)) condition 1 ou condition 2
    (&(cond1)(cond2)) condition 1 et condition 2
    (!(cond1)) négation de la condition 1
  • Un exemple plus réaliste :
    (|(sn=A*)(&(cn=user1)(dc=dil*)))
    

Création d'attributs et de classes

Si les classes et les attributs prédéfinis ne suffissent pas, il est possible de :

  • définir de nouveaux attributs,
    • à partir de rien,
    • à partir d'autres attributs.
  • définir de nouvelles classes
    • à partir de rien,
    • à partir de classes existantes.

Définition d'un attribut

Définition d'un attribut dans un schéma LDAP :

attributetype ( 2.5.4.41 NAME 'name'
  EQUALITY caseIgnoreMatch
  SUBSTR caseIgnoreSubstringsMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )

attributetype ( 2.5.4.4 NAME ( 'sn' 'surname' )
   DESC 'RFC2256: last (family) name(s) for which the entity is known by'
   SUP name )

attributetype ( 2.5.4.6 NAME ( 'c' 'countryName' )
   DESC 'RFC2256: ISO-3166 country 2-letter code'
   SUP name SINGLE-VALUE )

attributetype ( 2.5.4.10 NAME ( 'o' 'organizationName' )
   DESC 'RFC2256: organization this object belongs to'
   SUP name )

Définition d'une classe

Définition d'une classe dans un schéma LDAP :

objectclass ( 2.5.6.6 NAME 'person'
   DESC 'RFC2256: a person'
   SUP top STRUCTURAL
   MUST ( sn $ cn )
   MAY ( userPassword $ telephoneNumber $
      seeAlso $ description ) )

objectclass ( 2.5.6.2 NAME 'country'
   DESC 'RFC2256: a country'
   SUP top STRUCTURAL
   MUST c
   MAY ( searchGuide $ description ) )

objectclass ( 1.3.6.1.4.1.1466.344 NAME 'dcObject'
   DESC 'RFC2247: domain component object'
   SUP top AUXILIARY MUST dc )

Un exemple plus réaliste :

objectclass ( 2.5.6.4 NAME 'organization'
   DESC 'RFC2256: an organization'
   SUP top STRUCTURAL
   MUST o
   MAY ( userPassword $ searchGuide $ seeAlso $
      businessCategory $ x121Address $ 
      registeredAddress $ destinationIndicator $
      preferredDeliveryMethod $ telexNumber $
      teletexTerminalIdentifier $
      telephoneNumber $ internationaliSDNNumber $
      facsimileTelephoneNumber $ street $ postOfficeBox $
      postalCode $
      postalAddress $ physicalDeliveryOfficeName $ st $ l $
      description ) )