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 auxquelles 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'impose 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). Pour plus d'informations, voir
la page Utilisation des Web Services?.
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,
} );
A quoi sert le paramètre
https du handler ?
Ce paramètre n'est utilisé que dans
les redirections vers le portail d'authentification. Il sert juste
à indiquer à ce dernier qu'après authentification,
l'utilisateur doit être redirigé vers l'application en https
et non en http.
Qu'est ce qu'une CGI
auto-protégée ?
Lorsqu'on a qu'une seule page Perl à
protéger dans un VirtualHost, plutôt que de la
protéger en utilisant un agent Lemonldap::NG dans Apache, on peut
utiliser une CGI auto-protégée:
use Lemonldap::NG::Handler::CGI;
my $cgi = Lemonldap::NG::Handler::CGI->new ( {
# mêmes paramètres qu'un agent Lemonldap::NG::Handler::SharedConf
}
);
$cgi->authenticate;
Dans l'exemple ci-dessus, $cgi est un objet de
type CGI(3). La seule différence est qu'il bénéficie
de quelques fonctions supplémentaires:
- authenticate : pour appeler le mécanisme d'authentification
Lemonldap::NG,
- autorize : si on veut gérer les droits avec le manager,
- user : retourne la table de hash des paramètres
utilisateurs,
- group : permet de valider l'appartenance à un groupe.
Ce type de CGI est très utile lorsque les droits ne peuvent
être distingués par URL (requêtes POST par exemple). La
page de manuel Lemonldap::NG::Handler::CGI(3) détaille son
utilisation.
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
}
);
Lemonldap::NG protège simplement les
VirtualHosts d'Apache. Pour fonctionner en reverse-proxy, il suffit donc
de configurer Apache en reverse-proxy:
# httpd.conf
<VirtualHost *>
ServerName monappli
PerlRequire MyFile
PerlHeaderParserHandler My::Package
ProxyPass / http://serveur-reel/
ProxyPassReverse / http://serveur-reel/
# on peut aussi utiliser mod_rewrite
# RewriteEngine On
# RewriteRule /(.*)$ http://serveur-reel/$1 [P]
</VirtualHost>
Si toutefois vous préférez utiliser
un proxy Perl, Lemonldap::NG en fournit un
(Lemonldap::NG::Handler::Proxy(3)).
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.
Qu'est ce que le système
de notifications
C'est un système permettant de notifier un
message à un utilisateur lors de l'accès au portail. Si le
message contient des cases à cocher, elles doivent toutes
être cochées pour pouvoir ouvrir la session.
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.
- Liberty Alliance : tout en
conservant un mode d'authentification classique, on propose à
l'utilisateur d'utiliser la fédération d'identités
Liberty Alliance en permettant à celui-ci de s'authentifier sur
un fournisseur d'identités. Plus d'informations sur la page
Utilisation de Liberty
Alliance.
Messages d'erreur et de
déboguage
Lemonldap::NG produit des messages de
débogage et d'erreur enregistrés dans le journal d'Apache
(error.log par défaut). Vous pouvez modifier le niveau d'affichage
en adaptant le paramètre LogLevel d'Apache.
La page
Erreurs référence ces messages
d'erreur et de débogage.