Project

General

Profile

Evolution #239

Authentification LDAP

Added by Laurent Pelecq over 9 years ago. Updated almost 3 years ago.

Status:
Rejeté
Priority:
Normal
Category:
Core
Target version:
-
Start date:
05/06/2012
Due date:
% Done:

0%

Estimated time:
Vote:

Description

L'authentification peut soit être codée en dur dans Galette (Solution 1) ou mise à disposition dans un plugin à condition de permettre de déléguer l'authentification aux plugins (Solution 2). La deuxième solution est plus flexible.

Solution 1 : codage direct dans Galette

Il faut une page d'administration qui permette de saisir
  1. L'URL LDAP
  2. DN de connexion
  3. Mot de passe de connexion
  4. Filtre de recherche
  5. Filtre de sélection

L'URL est de type ldap://HOSTNAME ou ldaps://HOSTNAME. On peut aussi accepter HOSTNAME:PORT.

Le DN de connexion sert à rechercher le DN de l'utilisateur à l'aide du filtre. Il peut-être vide si une connexion anonyme suffit. Le filtre de recherche contient un emplacement pour insérer le login de galette.

Dans l'exemple suivant, on utilise $login comme variable :

 (&(objectClass=inetOrgPerson)(uid=$login))

Le filtre de sélection permet de restreindre l'accès aux utilisateurs appartenant à un groupe donné par exemple. Le résultat de la requête doit être non vide. Les variables seront les champs récupérés dans l'entrée LDAP de l'utilisateur lors de la première recherche ($dn pour le DN, $mail pour le mail, ...). Pour sélectionner que les membres du groupe galette, on mettra par exemple :

 (&(objectClass=groupOfUniqueNames)(cn=galette)(uniqueMember=$dn))

La page doit permettre d'activer ou désactiver l'authentification. Les paramètres peuvent être sauvés dans un fichier ou dans la base (prévoir la mise à jour). Ils devront être accessible aux plugins qui utiliseront LDAP.

L'authentification se fera en 3 temps (cf. exemple d'autehntification) :
  1. connexion à l'annuaire pour récupérer le DN de l'utilisateur grâce
    au filtre de recherche,
  2. contrôle de l'accès avec le filtre de sélection s'il existe
  3. connexion avec le DN de l'utilisateur et le mot de passe.

En cas d'échec, on s'authentifie avec la méthode par défaut ce qui permet d'avoir des comptes d'administration gérés en dehors de LDAP.

Le changement de mot de passe devra d'abord être délégué à LDAP (cf. implémentation) puis au mécanisme de base. La recherche de l'utilisateur se fera de la même façon avec les deux filtres.

Solution 2 : la délégation au plugins

La page d'administration LDAP et l'implémentation de la classe d'authentification seront déléguées au plugin. Il faudra prévoir une page d'administration qui propose les méthodes d'authentification fournies par les plugins. On peut envisager de chainer les mécanismes dans un ordre particulier. Le changement de mot de passe devra aussi être délégué aux plugins dans le même ordre.

Le plugin fournira un fichier login.php qui contiendra une classe d'authentification qui implémentera au moins les méthodes suivantes :
  • login(username, password)
  • changePassword(username, password)
  • exists(username)

Il n'y a pas de méthode logout. C'est Galette qui gère le cycle de vie des sessions. Le plugin ne fait qu'authentifier l'utilisateur.


Related issues

Is duplicate of Galette - Souhaits #764: Client OpenIDRejeté12/21/2013

Actions

Also available in: Atom PDF