LemonLDAP::NG

Lemonldap::NG est un Web-SSO modulaire basé sur les modules Apache::Session. Il simplifie la construction d'une aire protégée en minimisant les impacts sur les applications. Il gère à la fois les authentifications et les autorisations et fournit des en-têtes HTTP pour la traçabilité. On obtient ainsi une protection AAA complete (Authentication, Authorization and Accounting) des espaces web.

Lemonldap::NG est une réécriture complète de Lemonldap. Tous les éléments nécessaires à son exploitation et son administration sont fournis dans le package. En revanche les composants développés pour Lemonldap ne sont pas compatibles avec Lemonldap::NG.

Mécanismes d'authentification, d'autorisation et de traçabilité

Tous les paramètres abordés dans ce chapître sont accessibles via l'interface d'administration (voir la démonstration).

Authentification

Si un utilisateur n'est pas encore authentifié et tente de se connecter à une aire protégée par un agent Lemonldap::NG, il est redirigé vers le portail. Celui-ci authentifie l'utilisateur par défaut par une connexion LDAP, mais vous pouvez également utiliser un autre schéma tel les certificats x509 (voir Lemonldap::NG::Portal::AuthSSL(3)).

Lemonldap::NG utilise les cookies de session générés par le module Apache::Session soit aussi sécurisé que n'importe quelle système basé sur des cookies aléatoires de 128 bits. Il est recommandé d'activer l'option "cookie sécurisé" pour éviter les vols de session.

Par défaut, une session reste 10 minutes dans le magasin local du serveur Apache, donc dans le pire des cas, un utilisateur conserve son autorisation au plus 10 minutes après avoir perdu ses droits.

Autorisation

Les autorisations sont controlées seulement par les agents protégeant les applications. En effet, le portail ne peut connaître à l'avance les applications sur lesquels l'utilisateur se connectera. En configurant votre Web-SSO, vous devez: Exemple (Voir Lemonldap::NG::Manager::Conf(3) pour comprendre le stockage de la configuration) :
# Nom-choisi     => attribut LDAP
cn               => cn
departmentUID    => departmentUID
login            => uid
# Nom-choisi  => définition du groupe
group1        => { $departmentUID eq "unit1" or $login = "user1" }
^/protected/.*$  => $groups =~ /bgroup1b/
default          => accept
^/site/.*$       => $uid eq "admin" or $groups =~ /bgroup2b/
^/(js|css)       => accept
default          => deny
Performances

Vous pouvez utiliser des expressions Perl aussi complexe que nécessaire et vous pouvez utiliser tous les attibuts LDAP (et créer vos propres attributs additionnels avec le mécanisme des macros) dans les définitions de groupes, les règles d'accès et les en-têtes HTTP personnalisés: vous devez seulement utiliser le nom choisi précédé d'un "$".

Vous devez toutefois bien choisir vos expressions: Il est donc recommandé d'utiliser le mécanisme des groupes pour éviter de calculer de longues expressions à chaque requête:
^/protected/.*$   => $groups =~ /bgroup1b/

Dans la définition des groupes, vous pouvez au choix utiliser des filtres LDAP ou des expressions Perl ou encore mixer les deux. Les expressions Perl sont encadrées par {} :
group1 => (|(uid=xavier.guimard)(ou=unit1))
group1 => <uid eq "xavier.guimard" or $ou eq "unit1">
group1 => (|(uid=xavier.guimard)<ou eq "unit1">)

Pour limiter les requêtes LDAP, il est conseillé d'utiliser les expressions Perl. Ainsi seuls 2 sollicitations de l'annuaire sont nécessaires.

Traçabilité

Tracer les accès au portail

Lemonldap::NG::Portal n'enregistre pas les événements de connexion par défaut, mais il est très facile de surcharger la méthode "log".
Tracer les accès aux applications

Comme un Web-SSO ne peut interpréter le contenu des requêtes HTTP transmise aux applications protégées, il ne peut enregistrer au mieux que les URL. Et comme Apache le fait parfaitement, Lemonldap::NG::Handler(3) lui fournit le nom à enregistrer dans les journaux. Le paramètre optionnel "whatToTrace" indique la variable à utiliser ($uid par défaut).

La trace réelle doit être effectuée par l'application seule capable d'interpréter le résultat des transactions.

Lemonldap::NG peut exporter des en-têtes HTTP aussi bien en utilisant Apache en reverse-proxy qu'en protégent directement les applications. Par défaut, le champ Auth-User est utilisé mais vous pouvez choisir les en-têtes que vous transmettez à chaque application séparemment. Les expressions définissant les en-têtes associent : Exemple:
Auth-User     => $uid
Unit          => $ou
Authorization => "Basic ".encode_base64($employeeNumber.":dummy")
Remote-IP     => $ip

Installation

Attention : Voir installation manuel pour la documentation d'installation.

Système de stockage des sessions

Lemonldap::NG utilise 3 niveaux de cache pour les données des utilisateurs authentifiés : Ainsi, le nombre de requêtes au cache principal est limité à 1 par utilisateur actif toutes les 10 minutes.

Lemonldap::NG est très rapide, mais vous pouvez encore améliorer les performances en utilisnt un module Cache::Cache ne nécessitant pas d'accès au disque.

Auteur

Xavier Guimard, <x.guimard@free.fr>

Copyright et license

Copyright © 2005-2007 par Xavier Guimard <x.guimard@free.fr>

Ce logiciel est libre, vous pouvez le redistribuer et/ou le modifier sous les mêmes termes que Perl lui-même en version 5.8.4 ou à votre guise en version Perl 5 supérieure.