Concept
LDAP (Lightweight Directory Access Protocol) est un protocole d’accès à un annuaire d’utilisateur.
Ceci signifie que LDAP n’a pas de rapport avec la façon dont les données de l’annuaire sont stockées.
On peut comparer LDAP à ODBC pour les SGBDR : il s’agit d’un moyen d’accéder aux données.
Présentation
Schématisation
Un accès LDAP peut être comparé à un arbre constitué de branches et de feuilles (en anglais « DIT » pour « Directory Information Tree ») :
- Les branches sont l’arborescence de votre annuaire (en brun)
- Les feuilles sont vos objets répertoriés (en vert)
Attention, la comparaison avec un arbre s’arrête ici car :
- Une même feuille peut appartenir à plusieurs branches, en effet :
- Vous pourriez avoir un employé répertorier dans plusieurs services à la fois (multitâche).
- Vous pouvez organiser votre annuaire par groupes fonctionnels.
- Une branche peut également être une feuille, tout dépend de ce que vous recherchez :
- Si vous recherchez les services de l’entreprise alors les feuilles seront ici un rang plus haut.
Propriétés
Attributs et classes
Chaque objet du LDAP (les branches et les feuilles) possède des propriétés permettant de le décrire.
Ces propriétés sont stockées dans des attributs. Certains sont obligatoires et d’autres facultatifs.
Par exemple :
- Pour une personne :
- Le nom, le prénom et l’adresse mail sont obligatoires
- Le numéro de téléphone et le numéro de bureau sont facultatifs.
- Pour un service :
- Le nom du service et le nom du chef de service sont obligatoires.
- L’adresse mail, le bâtiment et l’étage sont facultatifs.
Les attributs s’écrivent sous la forme nom_attribut=valeur_attribut
Un seul attribut est toujours présent et toujours obligatoire et ce pour chaque objet. Il s’agit de l’attribut : objectclass
.
Celui-ci permet de définir la « classe » de chaque objet de l’annuaire : une organisation, un type de « chose », un service, une personne…
Ainsi, chaque objet est au moins définit par sa classe.
Dans notre schéma on peut donc imaginer les classes suivantes :
Le standard LDAP définit des classes standardisées pour simplifier l’interopérabilité LDAP/logiciel client mais rien ne vous empêche de créer vos propres classes.
Organisation des classes
Pour pouvoir gérer ces classes, la définition de chacune d’elle se trouve dans un (ou plusieurs) fichier(s) nommé(s) « schéma ».
Ce fichier décrit chaque classe :
- son nom
- les attributs obligatoires
- les attributs facultatifs
Chaque attribut y est également décrit :
- le nom de l’attribut
- le format de donnée qu’il doit contenir
Attention, un objet peut être associé à plusieurs classes : dans ce cas, il cumule les attributs des deux classes auxquels il appartient (bon, c’est étrange mais en gros ça veut dire que vous pouvez avoir un bâtiment considéré au sens classe comme un « bâtiment » et un « service » ce qui évite de multiplier les objets).
Standardisation
Chaque objet, en plus d’avoir une classe est en général nommé (ce n’est pas obligatoire mais fortement recommandé sinon bonjour le bazar).
Vous pouvez créer un attribut « nom » dans lequel vous renseignerez cette information.
Cependant, afin de simplifier l’utilisation des LDAP et de mieux s’y retrouver, il est courant d’utiliser les attributs suivants en fonction de la localisation dans l’arbre :
- Branches hautes :
dc=
: domaine component : il s’agit en général de l’organisation. - Branches intermédiaires :
ou=
: organisation unit : les différents services ou les différentes structures au sein de l’organisation - Feuilles :
cn=
: le nom de l’objet
Cette convention n’est pas obligatoire et il est tout à fait possible de n’utiliser que des cn. Même si ce n’est pas très pratique.
Il est en revanche très commun d’utiliser les deux en parallèle :
- Les dénomination différentes (
dc=
,ou=
…) pour toutes les branches. - Les dénomination
cn=
pour les branches basses et les feuilles.
Voici l’arbre précédent avec leurs dénominations :
On aurait pu utiliser la même dénomination pour le ou=
et pour le cn=
.
Identification
Nos objets sont donc répertoriés dans différents groupes. Mais comment distinguer John Deuf du Service Dev du John Deuf du Service Client ?
Grâce au Distinguished Name ou dn=
.
Il s’agit simplement du nom de l’objet auquel on ajoute tous les ascendants.
Voici quelques exemples :
cn=John Deuf
etdn=cn=John Deuf,ou=Service Client,ou=Employés,dc=Organisation
cn=Marine Ade
etdn=cn=Marine Ade,ou=Service Client,ou=Employés,dc=Organisation
cn=Guy Tar
etdn=cn=Guy Tar,ou=Service Dev,ou=Employés,dc=Organisation
Ceci nous permet maintenant de distinguer le John Deuf du Service client de celui du Service Dev (c’est peut-être la même personne mais nous savons maintenant à partir de quel service on veut y faire référence).
Les dn=
suivants sont tout à fait valables (utilisation des cn=
au lieu des ou=
) :
cn=John Deuf
etdn=cn=John Deuf,cn=SC,ou=Employés,dc=Organisation
cn=Marine Ade
etdn=cn=Marine Ade,cn=SC,ou=Employés,dc=Organisation
cn=Guy Tar
etdn=cn=Guy Tar,cn=SD,ou=Employés,dc=Organisation
Il est également possible de référencer un service :
cn=SC
etdn=cn=SD,ou=Employés,dc=Organisation
Le requêtage LDAP
Les requêtes LDAP ne sont pas très compliquées mais sont très puissantes.
Pour chercher des objets, il faut filtrer l’annuaire grâce à ces opérateurs :
=
: Egalité~=
: Approximation>=
: Supérieur ou égal<=
: Inférieur ou égal
Voici un exemple :(cn=John Deuf)
=> Renvoi 2 valeurs (le John Deuf du Service Client et celui du Service Dev).
Vous pouvez utiliser plusieurs les éléments suivants pour complexifier vos requêtes :
&
: AND : opérateur d’intersection|
: OR : opérateur d’union!
: NOT : opérateur de négation
Voici quelques exemples :
(&(cn=John Deuf)(ou=Service Client))
=> Renvoie 1 valeur, le John Deuf du Service Client.(&(cn=John Deuf)(!(ou=Service Client)))
=> Renvoie 1 valeur, le John Deuf du Service Dev.
Vous pouvez utiliser le caractère * comme joker.
Voici quelques exemples :
(&(cn=*)(ou=Service Client))
=> Renvoie 3 valeurs, les deux personnes du service client et le groupe Service Client.(&(cn=*)(ou=Service Client)(objectclass=employé)
=> Renvoie 2 valeurs, les deux personnes du service client.(&(|(cn=*)(ou=Service Client))(ou=personne)
=> Renvoie 8 valeurs, les 5 employés, plus les deux services plus le groupe « employé ».(&(|(cn=*)(ou=Service Client))(objectclass=employé)
=> Renvoie 5 valeurs, les 5 employés.(&(|(cn=John*)(cn=Camille*))(objectclass=employé)
=> Renvoie 3 valeurs, les deux John et Camille.(&(cn=*ne*)(objectclass=employé)
=> Renvoie 2 valeurs, Marine et Camille.
Cet article vous a plu ?
N'hésitez pas à le partager, il interessera surement certains de vos contacts.
Les thèmes suivants contiennent des articles en lien avec celui-ci, allez faire un tour :
IT LDAP