<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"> <head> <meta name="generator" content= "HTML Tidy for Linux/x86 (vers 6 November 2007), see www.w3.org" /> <title>Lemonldap::NG documentation: faq-fr.html</title> <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" /> </head> <body> <div class="main-content"> <h2 class="heading-1"><span id="HFoireauxquestionsLemonldap3A3ANG">Foire aux questions Lemonldap::NG</span></h2> <p class="paragraph"></p> <ul> <li> <a href="#HLemonldap3A3ANG">Lemonldap::NG</a> <ul> <li><a href="#HQu27estcequ27unWebSSO3F">Qu'est-ce qu'un Web-SSO ?</a></li> <li><a href= "#HQu27apporteLemonldap3A3ANGparrapportauxautresSSO3F">Qu'apporte Lemonldap::NG par rapport aux autres SSO ?</a></li> </ul> </li> <li> <a href="#HConfiguration">Configuration</a> <ul> <li><a href= "#HQuelsystC3A8medestockagedeconfigurationchoisir3F">Quel système de stockage de configuration choisir ?</a></li> <li><a href= "#HL27exemplefournifonctionneenHTTP2CmaispasenHTTPS">L'exemple fourni fonctionne en HTTP, mais pas en HTTPS.</a></li> <li><a href="#HAquoisertleparamC3A8trehttpsduhandler3F">A quoi sert le paramètre https du handler ?</a></li> <li><a href="#HQu27estcequ27uneCGIautoprotC3A9gC3A9e3F">Qu'est ce qu'une CGI auto-protégée ?</a></li> <li><a href= "#HCommentfairefonctionnerLemonldap3A3ANGavecunannuaireActiveDirectory3F"> Comment faire fonctionner Lemonldap::NG avec un annuaire Active-Directory ?</a></li> <li><a href= "#HCommentutiliserLemonldap3A3ANGenreverseproxy3F">Comment utiliser Lemonldap::NG en reverse-proxy ?</a></li> </ul> </li> <li> <a href="#HFonctionnement">Fonctionnement</a> <ul> <li><a href="#HAquoisertlecachelocaldesagents28handlers293F">A quoi sert le cache local des agents (handlers) ?</a></li> <li><a href= "#HPourquoinepeutonpasconfigurerlecachelocaldesagents28handlers29danslaconsoled27administration3F"> Pourquoi ne peut-on pas configurer le cache local des agents (handlers) dans la console d'administration ?</a></li> <li><a href= "#HQu27estcequele7E7ECrossDomainAuthentication7E7E28CDA293F">Qu'est ce que le <i class="italic">Cross Domain Authentication</i> (CDA) ?</a></li> <li><a href= "#HCommentfonctionnele7E7ECrossDomainAuthentication7E7E28CDA293F">Comment fonctionne le <i class="italic">Cross Domain Authentication</i> (CDA) ?</a></li> </ul> </li> <li> <a href="#HAuthentification">Authentification</a> <ul> <li><a href="#HPeutonchangerlemoded27authentification3F">Peut-on changer le mode d'authentification ?</a></li> </ul> </li> <li><a href="#HMessagesd27erreuretdedC3A9boguage">Messages d'erreur et de déboguage</a></li> </ul> <h3 class="heading-1-1"><span id= "HLemonldap3A3ANG">Lemonldap::NG</span></h3> <h4 class="heading-1-1-1"><span id="HQu27estcequ27unWebSSO3F">Qu'est-ce qu'un Web-SSO ?</span></h4> <p class="paragraph"></p>Un SSO <i class="italic">(Single Sign On)</i> 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. <p class="paragraph"></p>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. <p class="paragraph"></p>Lemonldap::NG est un des systèmes permettant la gestion du Web-SSO. <h4 class="heading-1-1-1"><span id= "HQu27apporteLemonldap3A3ANGparrapportauxautresSSO3F">Qu'apporte Lemonldap::NG par rapport aux autres SSO ?</span></h4> <ul class="star"> <li>Lemonldap comme lemonldap::NG sont des modules Apache Perl et offrent des performances qui rendent imperceptible le traitement de l'accès.</li> <li>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 <span class="wikiexternallink"><a href= "http://wiki.lemonldap.objectweb.orgoverview-fr.html#HMC3A9canismesd27authentification2Cd27autorisationetdetraC3A7abilitC3A9"> documentation AAA</a></span>).</li> <li>Lemonldap::NG n'impose aucune modification de l'annuaire : les droits sont calculés à partir de n'importe quel attribut.</li> <li>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.</li> <li>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.</li> <li>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><span class="nobr"><a href= "http://lemonldap.objectweb.org/NG/ManagerDemo/fr/">http://lemonldap.objectweb.org/NG/ManagerDemo/fr/</a></span>). 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é.</li> </ul> <h3 class="heading-1-1"><span id= "HConfiguration">Configuration</span></h3> <h4 class="heading-1-1-1"><span id= "HQuelsystC3A8medestockagedeconfigurationchoisir3F">Quel système de stockage de configuration choisir ?</span></h4> <p class="paragraph"></p>Lemonldap::NG fournit 3 types de stockage de configuration: <ul class="star"> <li><strong class="strong">File</strong>: 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,</li> <li><strong class="strong">DBI</strong>: <span class= "wikiexternallink"><a href= "http://www.linuxmanpages.com/man3/DBI.3pm.php">DBI(3)</a></span> 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,</li> <li><strong class="strong">SOAP</strong>: 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 <span class="wikilink"><a href= "/xwiki/bin/view/NG/DocSOAP">Utilisation des Web Services</a></span>.</li> </ul> <h4 class="heading-1-1-1"><span id= "HL27exemplefournifonctionneenHTTP2CmaispasenHTTPS">L'exemple fourni fonctionne en HTTP, mais pas en HTTPS.</span></h4> <p class="paragraph"></p>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 <tt>https</tt> 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 <tt>init</tt> (dans le fichier My::Package) qu'il doit être renseigné: <p class="paragraph"></p> <pre> __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', }, <strong class="strong">https => 1</strong>, } ); </pre> <h4 class="heading-1-1-1"><span id= "HAquoisertleparamC3A8trehttpsduhandler3F">A quoi sert le paramètre https du handler ?</span></h4> <p class="paragraph"></p>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. <h4 class="heading-1-1-1"><span id= "HQu27estcequ27uneCGIautoprotC3A9gC3A9e3F">Qu'est ce qu'une CGI auto-protégée ?</span></h4> <p class="paragraph"></p>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: <p class="paragraph"></p> <pre> 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; </pre> <p class="paragraph"></p>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: <ul class="star"> <li>authenticate : pour appeler le mécanisme d'authentification Lemonldap::NG,</li> <li>autorize : si on veut gérer les droits avec le manager,</li> <li>user : retourne la table de hash des paramètres utilisateurs,</li> <li>group : permet de valider l'appartenance à un groupe.</li> </ul>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. <h4 class="heading-1-1-1"><span id= "HCommentfairefonctionnerLemonldap3A3ANGavecunannuaireActiveDirectory3F">Comment faire fonctionner Lemonldap::NG avec un annuaire Active-Directory ?</span></h4> <p class="paragraph"></p>Active-Directory utilise le champ <tt>cn</tt> comme identifiant unique au lieu de <tt>uid</tt>. Il faut donc modifier la configuration de Lemonldap::NG en deux points : <ol> <li>la recherche de l'utilisateur dans l'annuaire doit être effectuée avec le champ <tt>cn</tt> (ou <tt>samAccountName</tt>),</li> <li>les journaux d'Apache doivent être enrichis avec ce même champ.</li> </ol>Pour le deuxième point, la modification est très simple : il faut remplacer <tt>$uid</tt> par <tt>$cn</tt> 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: <pre> #!/usr/bin/perl use Lemonldap::NG::Portal::SharedConf; my $portal = Lemonldap::NG::Portal::SharedConf->new( { configStorage => { type => 'File', dirName => '/var/lib/lemonldap-ng/conf', }, <strong class="strong">formateFilter => sub {</strong> my $self = shift; $self->{filter} = "(&(cn=" . $self->{user} . ")(objectClass=person))"; PE_OK; } # fin de la surcharge } ); </pre> <h4 class="heading-1-1-1"><span id= "HCommentutiliserLemonldap3A3ANGenreverseproxy3F">Comment utiliser Lemonldap::NG en reverse-proxy ?</span></h4> <p class="paragraph"></p>Lemonldap::NG protège simplement les VirtualHosts d'Apache. Pour fonctionner en reverse-proxy, il suffit donc de configurer Apache en reverse-proxy: <p class="paragraph"></p> <pre> # httpd.conf <VirtualHost *> ServerName monappli PerlRequire MyFile PerlHeaderParserHandler My::Package ProxyPass / <span class="nobr"><a href= "http://serveur-reel/">http://serveur-reel/</a></span> ProxyPassReverse / <span class="nobr"><a href= "http://serveur-reel/">http://serveur-reel/</a></span> # on peut aussi utiliser mod_rewrite # RewriteEngine On # RewriteRule /(.*)$ <span class="nobr"><a href= "http://serveur-reel/$1">http://serveur-reel/$1</a></span> [P] </VirtualHost> </pre> <p class="paragraph"></p>Si toutefois vous préférez utiliser un proxy Perl, Lemonldap::NG en fournit un (Lemonldap::NG::Handler::Proxy(3)). <h3 class="heading-1-1"><span id= "HFonctionnement">Fonctionnement</span></h3> <h4 class="heading-1-1-1"><span id= "HAquoisertlecachelocaldesagents28handlers293F">A quoi sert le cache local des agents (handlers) ?</span></h4> <p class="paragraph"></p>Le cache local des agents a deux fonctions: <ul class="star"> <li>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,</li> <li>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.</li> </ul> <h4 class="heading-1-1-1"><span id= "HPourquoinepeutonpasconfigurerlecachelocaldesagents28handlers29danslaconsoled27administration3F"> Pourquoi ne peut-on pas configurer le cache local des agents (handlers) dans la console d'administration ?</span></h4> <p class="paragraph"></p>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. <h4 class="heading-1-1-1"><span id= "HQu27estcequele7E7ECrossDomainAuthentication7E7E28CDA293F">Qu'est ce que le <i class="italic">Cross Domain Authentication</i> (CDA) ?</span></h4> <p class="paragraph"></p>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. <h4 class="heading-1-1-1"><span id= "HCommentfonctionnele7E7ECrossDomainAuthentication7E7E28CDA293F">Comment fonctionne le <i class="italic">Cross Domain Authentication</i> (CDA) ?</span></h4> <p class="paragraph"></p>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. <h3 class="heading-1-1"><span id= "HAuthentification">Authentification</span></h3> <h4 class="heading-1-1-1"><span id= "HPeutonchangerlemoded27authentification3F">Peut-on changer le mode d'authentification ?</span></h4> <p class="paragraph"></p>Lemonldap::NG fournit plusieurs modes d'authentification (à paramétrer dans le champ "authentification" de l'interface d'administration) : <ul class="star"> <li><strong class="strong">ldap</strong> : c'est le mode par défaut: le portail tente de se connecter avec les éléments fournis par l'utilisateur</li> <li><strong class="strong">CAS</strong> : le portail Lemonldap::NG devient alors un simple relais CAS: si l'utilisateur n'est pas authentifié, on le revoie vers le portail CAS</li> <li><strong class="strong">SSL</strong> : 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.</li> <li><strong class="strong">Apache</strong> : 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.</li> <li><strong class="strong">Liberty Alliance</strong> : 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 <span class="wikilink"><a href="/xwiki/bin/view/NG/DocLA">Utilisation de Liberty Alliance</a></span>.</li> </ul> <h3 class="heading-1-1"><span id= "HMessagesd27erreuretdedC3A9boguage">Messages d'erreur et de déboguage</span></h3> <p class="paragraph"></p>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. <p class="paragraph"></p>La page <span class="wikilink"><a href= "errors-fr.html">Erreurs</a></span> référence ces messages d'erreur et de débogage. </div> </body> </html>