Foire
aux questions Lemonldap::NG
Lemonldap::NG
Qu'est-ce
qu'un Web-SSO ?
Un SSO
(Single Sign On) est
un dispositif qui permet de partager les authentifications entre plusieurs
applications. L'utilisateur ne s'authentifie ainsi qu'une fois et n'est
pas interrompu lorsqu'il change d'application. Kerberos (utilisé
dans Active Directory) par exemple est un SSO. Le problème de ces
systèmes est qu'outre leur lourdeur, ils ne s'appliquent
qu'à des Intranets sur des machines relativement homogènes.
Le Web-SSO est le portage de ce principe
restreint aux applications Web. L'utilisateur est donc authentifié
au premier accès à une application web
protégée et les authentifications se propagent lorsqu'il
change d'application. Le gros avantage est alors que le système est
utilisable sur Internet sans pré-requis sur les postes clients (il
suffit d'accepter les cookies de session). Par exemple, lorsqu'un
utilisateur accède à une boîte-aux-lettres Google, il
n'est pas réauthentifié s'il accède à
l'application de gestion des groupes ou tout autre application Google.
Lemonldap::NG est un des systèmes
permettant la gestion du Web-SSO.
Qu'apporte
Lemonldap::NG par rapport aux autres SSO ?
- Lemonldap comme lemonldap::NG sont des modules Apache Perl et
offrent des performances qui rendent imperceptible le traitement de
l'accès.
- Un des autres points forts de Lemonldap::NG est sa capacité
à gérer les droits de façon centralisée: les
SSO type Kerberos ou CAS permettent le partage des authentifications
mais délèguent aux applications la gestion des
autorisations d'accès. Dans le cas de Lemonldap::NG, la gestion
des droits peut être centralisée totalement, en partie ou
pas du tout pour chaque application: Lemonldap::NG fournit un
système d'autorisations basé sur le tri des URL par
expressions régulières auquelles on associe une
règle. Il fournit également des en-têtes HTTP
à l'application contenant n'importe quel attribut issue de
l'annuaire LDAP. Celle-ci peut alors gérer la
traçabilité des accès et éventuellement des
droits d'accès (voir la
documentation AAA).
- Lemonldap::NG n'imose aucune modification de l'annuaire: les droits
sont calculés à partir de n'importe quel attribut.
- Lemonldap::NG peut publier n'importe quel attribut LDAP ou des
expressions calculées à partir de ces attributs dans les
en-têtes HTTP. On peut ainsi éviter aux applications
d'avoir à consulter l'annuaire LDAP.
- Lemonldap::NG traite tous les sites hébergés (virtuels
ou réels) indépendamment: on peut ainsi fournir à
chaque application des en-têtes personnalisés.
- Lemonldap::NG fournit une interface web d'administration
présentant simplement la configuration, les droits d'accès
et les en-têtes par site protégé (voir la
démonstration>http://lemonldap.objectweb.org/NG/ManagerDemo/fr/).
On peut également ne montrer qu'une partie de la configuration en
lecture seule et une autre en lecture écriture: l'interface
d'administration peut ainsi être partiellement
déléguée par site protégé.
Configuration
Quel système de
stockage de configuration choisir ?
Lemonldap::NG fournit 3 types de stockage de
configuration:
- File: le système le plus
simple, il ne permet en revanche de partager la configuration que parmi
les serveurs qui partagent un système de fichier. On peut ainsi
l'utiliser dans le cas où tous les VirtualHosts à
protéger se trouvent sur le même serveur,
- DBI: DBI(3) est
une couche d'abstraction de l'accès aux bases de données
fournie par Perl. Utilisée dans Lemonldap::NG, elle permet de
partager la configuration entre serveurs mais suppose que tous ces
serveurs accèdent à la même base de donnée.
C'est une solution recommandée pour partager la configuration sur
un réseau de serveurs,
- SOAP: Ce système n'est pas
à proprement parler un système de stockage, mais permet
à un serveur distant d'accéder à la configuration
par une simple connexion HTTP(S). Le serveur SOAP accède lui
à la configuration par un des systèmes
précédents (File ou DBI).
L'exemple fourni
fonctionne en HTTP, mais pas en HTTPS.
Dans le mécanisme des redirections vers le
portail puis vers le site protégé, il faut indiquer à
l'agent (handler) s'il est de type HTTPS ou non. Ceci est fait par le
paramètre
https qui doit être mis à 1. Ce
paramètre n'est pas accessible dans la configuration (manager), car
il est spécifique aux hôtes virtuels. C'est donc lors de
l'appel à la fonction
init (dans le fichier My::Package)
qu'il doit être renseigné:
__PACKAGE__->init ( {
localStorage => "Cache::FileCache",
localStorageOptions => {
'namespace' => 'MyNamespace',
'default_expires_in' => 600,
'directory_umask' => '007',
'cache_root' => '/tmp',
'cache_depth' => 5,
},
configStorage => {
type => 'File',
dirName => '/var/lib/lemonldap-ng/conf',
},
https => 1,
} );
Active-Directory utilise le champ
cn
comme identifiant unique au lieu de
uid. Il faut donc modifier la
configuration de Lemonldap::NG en deux points :
- la recherche de l'utilisateur dans l'annuaire doit être
effectuée avec le champ cn (ou
samAccountName),
- les journaux d'Apache doivent être enrichis avec ce même
champ.
Pour le deuxième point, la modification est très simple
: il faut remplacer
$uid par
$cn dans le champ
"Paramètres généraux -> Donnée à
inscrire dans les journaux d'Apache (et vérifier que cette variable
est déclarée dand les attributs à exporter). Le
changement de filtre de recherche nécessite la surcharge d'une
méthode dans le portail. Cette modification peut être
effectuée comme suit:
#!/usr/bin/perl
use Lemonldap::NG::Portal::SharedConf;
my $portal = Lemonldap::NG::Portal::SharedConf->new(
{
configStorage => {
type => 'File',
dirName => '/var/lib/lemonldap-ng/conf',
},
formateFilter => sub {
my $self = shift;
$self->{filter} = "(&(cn=" . $self->{user} . ")(objectClass=person))";
PE_OK;
} # fin de la surcharge
}
);
Fonctionnement
A quoi sert le cache local
des agents (handlers) ?
Le cache local des agents a deux fonctions:
- partager la configuration entre processus Apache: on évite
ainsi un téléchargement de la configuration à
chaque création d'un processus. C'est également
indispensable pour utiliser le mécanisme de rechargement de la
configuration sans relance du serveur Apache,
- partager les sessions en cours entre processus et threads Apache:
ceci permet d'éviter d'avoir à effectuer une requête
au magasin central des sessions à chaque requête (on ne
retombe en effet pas nécessairement sur le même processus).
Dans le cas où le cache central des sessions est accessible par
le réseau, on transforme ainsi une requête TCP en une
requête au système de ficher voir simplement à la
mémoire partagée ce qui augmente fortement les
performances.
Pourquoi ne peut-on pas configurer le cache local des agents (handlers)
dans la console d'administration ?
Le cache local doit être choisi ou
paramétré en fonction du serveur: si on choisit par exemple
le module Cache::FileCache, le répertoire de stockage n'est pas
nécessairement le même partout. De plus, une modification du
cache ne peut être appliquée sans redémarrage du
serveur Apache contrairement aux autres paramètres
gérés par la console d'administration.
Qu'est ce que
le Cross Domain Authentication (CDA) ?
Le système de propagation de la session
Lemonldap::NG est basé sur des cookies. Or ces cookies sont
attachés au domaine dont ils sont issus. Lemonldap::NG fournit un
dispositif permettant de passer outre ce problème: il suffit
d'utiliser le portail Lemonldap::NG::Portal::CDA et les agents
Lemonldap::NG::Handler::CDA sur les sites protégés en dehors
du domaine du portail.
Comment
fonctionne le Cross Domain Authentication (CDA)
?
Un portail Lemonldap::NG::Portal::CDA
détecte si l'URL demandée n'est pas dans le même
domaine. Si c'est le cas, il ajoute un paramètre à cette
requête correspondant au cookie de session. Lorsque l'utilisateur
est renvoyé vers cette URL, l'agent Lemonldap::NG::Handler::CDA
reconnaît ce paramètre et génère alors le
cookie dans son domaine. Il retire alors le paramètre ajouté
par le portail et effectue le traitement normal de la requête.
Authentification
Peut-on changer le mode
d'authentification ?
Lemonldap::NG fournit plusieurs modes
d'authentification (à paramétrer dans le champ
"authentification" de l'interface d'administration) :
- ldap : c'est le mode par
défaut: le portail tente de se connecter avec les
éléments fournis par l'utilisateur
- CAS : le portail Lemonldap::NG
devient alors un simple relais CAS: si l'utilisateur n'est pas
authentifié, on le revoie vers le portail CAS
- SSL : ce dispositif confie à
Apache le soin d'authentifier les utilisateurs par mécanisme SSL.
Ce dispositif est très intéressant lorsqu'on utilise des
certificats SSL: si on protège toutes les applications par
certificats mutuels les nombreuses négociations SSL
pénaliserons les performances et en cas d'emploi de cartes
à puces protégeant chaque opération, l'utilisateur
devra saisir plusieurs fois son code. Avec ce dispositif, seule
l'accès au portail Lemonldap::NG nécessite la
présentation du certificat client. Ensuite, c'est le cookie
sécurisé qui assure la propagation de
l'authentification.
- Apache : dans le même esprit,
on confie à Apache l'authentification. Par exemple avec Kerberos,
le module Kerberos d'Apache assure la protection du portail. On
améliore ainsi les performances puisqu'une seule
négociation Kerberos est nécessaire pour toute la
session.