Intégration Drupal avec un annuaire LDAP

Dans une architecture de type intranet, il est intéressant d'avoir une base de comptes commune, partagée entre plusieurs applications.
Ceci permet dans un premier temps d'avoir un seul couple login / mot de passe, et supprime la nécessite de créer manuellement des comptes dans chaque application.
Les annuaires LDAP sont souvent utilisés pour stocker les comptes, l'intérêt étant qu'ils sont intégrables avec de nombreuses applications (LDAP est un protocole normalisé), et qu'il est assez facile de mettre en place une architecture haute-disponibilité avec des annuaires LDAP, pour un coût négligeable.

Nous allons, dans la suite de cet article, montrer comment intégrer Drupal avec un annuaire LDAP, et quels sont les fonctionnalités offertes via cette intégration.

Article en cours de rédaction, à compléter !

Installation du module

Pré requis

Pour utiliser les modules, il faut que PHP dispose des librairies / extensions LDAP. Sur une distribution type Debian, ceci se fait via :

sudo apt-get install php5-ldap

Téléchargement du module Drupal

Pour Drupal 7, nous allons utiliser le module LDAP (https://www.drupal.org/project/ldap).
La documentation (en anglais) du module se trouve à http://drupal.org/node/997082.

L'installation via drush est simple :

drush dl ldap
Project ldap (7.x-2.0-beta8) downloaded to /var/www/monsite/sites/all/modules/ldap.                                  [success]
Project ldap contains 12 modules: ldap_authentication, ldap_sso, ldap_query, ldap_user, ldap_servers, ldap_test, ldap_feeds, ldap_views, ldap_authorization_drupal_role, ldap_authorization_og, ldap_authorization, ldap_help.

On constate tout de suite que ce module est en fait une suite de différents modules, qui offrent des fonctionnalités variées. Nous les citons ici dans l'ordre des dépendances :

  • LDAP Servers (ldap_servers) : fournit la configuration du module.
  • LDAP User Module (ldap_user) : fournit les fonctions permettant de gérer la correspondance entre les utilisateurs Drupal et ceux du LDAP, y compris entre les attributs du LDAP et les champs Drupal
  • LDAP Authentication (ldap_authentication) : fournit les fonctions d'authentification sur l'annuaire LDAP
  • LDAP Authorization (ldap_authorization) : fournit la capacité de faire correspondre des groupes LDAP à des rôles Drupal

Ces modules sont suffisants pour gérer l'interaction avec le LDAP pour les utilisateurs.
D'autres modules peuvent compléter ces fonctions :

  • LDAP Query (ldap_query) : permet de consruire des requêtes LDAP, qui seront utilisées dans d'autres modules
  • LDAP Feeds (ldap_feeds) : permet, sur la base des query prédéfinies, d'automatiser la création de contenu sur la base de requêtes LDAP
  • LDAP Views (ldap_views) : intégration des requêtes LDAP avec Views

Dans un premier temps, nous allons uniquement activer les modules Servers, User, Authentication et Authorization

drush en ldap_servers ldap_user ldap_authentication ldap_authorization ldap_authorization_drupal_role
The following extensions will be enabled: ldap_servers, ldap_user, ldap_authentication, ldap_authorization, ldap_authorization_drupal_role
Do you really want to continue? (y/n): y
ldap_user was enabled successfully.                                                                                      [ok]
ldap_authentication was enabled successfully.                                                                            [ok]
ldap_authorization was enabled successfully.                                                                             [ok]
ldap_authorization_drupal_role was enabled successfully.                                                                 [ok]
ldap_servers was enabled successfully.                                                                                   [ok]

Paramétrage

Pour procéder au paramétrage, il faut connaître quelques informations sur l'annuaire LDAP :

  • Adresse IP / hostname
  • Port d'écoute (généralement 389 en clair, 636 en LDAPS)
  • Base DN (la base de recherche dans l'annuaire)
  • Compte de "service" sur l'annuaire (pour éviter les connexions anonymes)
  • Mot de passe de ce compte

Ajout d'un annuaire

L'ajout / paramétrage d'un serveur d'annuaire se fait via l'URL : /admin/config/people/ldap/servers/add. [image à ajouter]

Connection Settings / Paramètres de connexion

C'est ici que l'on renseigne les éléments de connexion à l'annuaire :

  • Machine name : un nom "machine" unique
  • Name : le nom du serveur (nom indicatif, par exemple "Mon serveur LDAP")
  • Activé : cocher la case pour activer cette instance de serveur
  • LDAP Server Type : on peut définir quel type de serveur LDAP (défaut, Active Directory, OpenLDAP, Novell, Apple)
  • LDAP Server : adresse IP ou hostname du serveur
  • LDAP Port : port du serveur (389 par défaut)
  • Use Start-TLS : à cocher uniquement si l'annuaire est paramétré pour utiliser TLS
  • Follow LDAP Referrals : à cocher si le client doit suivre les referrals. Inutile si on n'a qu'un seul serveur LDAP

[image à ajouter] Par exemple, on peut avoir :

  • Machine name : my_ldap_server
  • Name : LDAP Server
  • Activé : Oui (coché)
  • LDAP Server Type : Open LDAP
  • LDAP Server : 10.0.3.16 (adresse IP du serveur LDAP)
  • LDAP Port : 389
  • Autres cases décochées

Binding Methode / Méthode de connexion

Cette section permet de renseigner les paramètres de connexion à l'annuaire. L'utilisation d'un compte de service est une bonne pratique.
Elle permet d'éviter les connexions anonymes, et d'isoler quel compte fait quelles requêtes : utile en cas de besoin d'analyse des logs.
On définit donc ici le type de connexion et les paramètres:

  • Type : Service Account Bind (avec un compte)
  • DN for non anonymous search : DN du compte (par exemple : cn=drupal_service,dc=example,dc=com)
  • Password for non-anonymous search : Mot de passe du compte

LDAP user to Drupal User Relationship / Relations entre utilisateurs Drupal et LDAP

Cette section permet de définir comment faire la relation entre les utilisateurs Drupal et LDAP. C'est ici que l'on définit les DN de base pour la rechercher des utilisateurs dans l'annuaire.

On peut définir plusieurs bases de recherche, si les comptes sont répartis dans plusieurs containers / branches.

On va également définir quels sont les attributs utilisés pour identifier les comptes :

  • AuthName attribute : uid
  • AccountName attribute : uid
  • Email attribute : mail
  • Persistent and Unique User ID Attribute : dn

Dans notre exemple, les comptes sont référencés par uid=XXXX,(BASEDN). Par exemple : uid=TSTLDAP1,ou=people,dc=example,dc=com.

User

Cette section, assez riche, permet de définir les interactions entre l'annuaire LDAP et le Drupal pour les utilisateurs.
On peut par exemple définir les règles de provisionnement des attributs entre LDAP et Drupal (et également dans l'autre sens) en faisant correspondre les champs LDAP et les champs Drupal.

Attention : une fois les champs source et destination définis, ne pas oublier de cocher les cases :

  • On Drupal User Creation : synchronisation à la création de l'utilisateur
  • On Synch to Drupal User : synchronisation lors du cron ou de la connexion de l'utilisateur

Il faut s'assurer que le type des champs de l'annuaire est compatible avec les champs Drupal.
Nous avons eu par exemple un problème avec un champ Drupal qui est une référence une taxonomie (Drupal attend un ID) alors que dans l'annuaire LDAP on avait un attribut de type Texte (le code de la taxonomie).

 

Il est également possible de créer un compte dans l'annuaire LDAP à partir de Drupal. Pour cela, il faut respecter le paramétrage suivant : Show option on user create form to determine how account conflict is resolved. Activer l'annuaire dans le "BASIC PROVISIONING TO LDAP SETTINGS Cocher : Create or Synch to LDAP entry when a Drupal account is created or updated. Only applied to accounts with a status of approved. Provide option on admin/people/create to create corresponding LDAP Entry.

Authentication

Cette partie permet de gérer le mode d'authentification :

  • Mixed mode : on teste d'abord l'authentification Drupal, puis LDAP
  • Only LDAP : seule l'authentification LDAP est utilisée, SAUF pour le super Administrateur (ID=1)
  • Authentication LDAP Server : cocher le(s) serveur(s) LDAP utilisé(s) pour l'authentification

On utilise souvent le mode Mixed, qui permet de garder quelques utilisateurs directement dans le Drupal, pour gérer les exceptions.

Authorization

Attention : les autorisations ne semblent fonctionner qu'avec des groupes LDAP ou un attribut de type memberof. On peut cependant assigner un rôle par défaut en utilisant plusieurs paramètres :

Catégorie
Tag