<?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: liberty-alliance-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="HUtilisationdeLibertyAlliance">Utilisation de Liberty Alliance</span></h2> <p class="paragraph"></p> <ul> <li> <a href="#HPrC3A9requis">Pré-requis</a> <ul> <li><a href="#HVersiondeLemonLDAP3A3ANG">Version de LemonLDAP::NG</a></li> <li><a href="#HLasso">Lasso</a></li> </ul> </li> <li> <a href="#HPrC3A9sentation">Présentation</a> <ul> <li><a href="#HLibertyAlliance">Liberty Alliance</a></li> <li><a href="#HLeprojetFederID">Le projet FederID</a></li> <li><a href= "#HFonctionnementdeLemonLDAP3A3ANGavecLibertyAlliance">Fonctionnement de LemonLDAP::NG avec Liberty Alliance</a></li> </ul> </li> <li> <a href="#HInstallationetparamC3A9trage">Installation et paramétrage</a> <ul> <li><a href="#HConsidC3A9rations">Considérations</a></li> <li><a href="#HFournisseurd27identitC3A9">Fournisseur d'identité</a></li> <li><a href="#HComposantsLemonLDAP3A3ANG">Composants LemonLDAP::NG</a></li> <li> <a href="#HPortailLibertyAlliance">Portail Liberty Alliance</a> <ul> <li><a href= "#HInstallationdesfichiersspC3A9cifiques">Installation des fichiers spécifiques</a></li> <li><a href="#HCrC3A9ationdesmetadataduSP">Création des metadata du SP</a></li> <li><a href= "#HEnregistrementdeLemonLDAP3A3ANGsurlefournisseurd27identitC3A9s"> Enregistrement de LemonLDAP::NG sur le fournisseur d'identités</a></li> <li><a href= "#HEnregistrementdufournisseurd27identitC3A9ssurLemonLDAP3A3ANG"> Enregistrement du fournisseur d'identités sur LemonLDAP::NG</a></li> <li><a href="#HParamC3A9trageduportail">Paramétrage du portail</a></li> </ul> </li> </ul> </li> <li><a href="#HDC3A9monstration">Démonstration</a></li> </ul> <h3 class="heading-1-1"><span id= "HPrC3A9requis">Pré-requis</span></h3> <h4 class="heading-1-1-1"><span id="HVersiondeLemonLDAP3A3ANG">Version de LemonLDAP::NG</span></h4> <p class="paragraph"></p>Le support Liberty Alliance est inclus à LemonLDAP::NG depuis la version 0.9. <h4 class="heading-1-1-1"><span id="HLasso">Lasso</span></h4><br /> <br /> Pour fonctionner, il faut que le binding Perl de la bibliothèque lasso soit installé sur le serveur.<br /> <br /> Le téléchargement peut se faire sur la page du projet (<span class="nobr"><a href= "http://lasso.entrouvert.org/download/">http://lasso.entrouvert.org/download/</a></span>).<br /> <br /> Sous Debian, si les dépôts sont activés, l'installation se fait par la commande suivante :<br /> <br /> <div class="code"> <pre> # apt-get install liblasso-perl </pre> </div> <h3 class="heading-1-1"><span id= "HPrC3A9sentation">Présentation</span></h3> <h4 class="heading-1-1-1"><span id="HLibertyAlliance">Liberty Alliance</span></h4><br /> <br /> <img src="/xwiki/bin/download/NG/DocLA/liberty_alliance_logo_jpeg.jpg" alt="liberty_alliance_logo_jpeg.jpg" /><br /> <br /> Cette norme permet de fédérer des identités issues de référentiels différents (par exemple un annuaire, une base de données, etc.). Ces données ne sont pas synchronisées mais l'utilisateur qui accède à des services utilisant ces identités (un site d'achat en ligne par exemple) pourra fédérer son identité principale avec l'identité utilisée par ce service. Ainsi il pourra accéder de manière transparente à plusieurs applications utilisant plusieurs identités, sans avoir à se réauthentifier.<br /> <br /> Voir aussi : <ul class="star"> <li><span class="nobr"><a href= "http://fr.wikipedia.org/wiki/Liberty_Alliance">http://fr.wikipedia.org/wiki/Liberty_Alliance</a></span></li> <li><span class="nobr"><a href= "http://www.projectliberty.org/">http://www.projectliberty.org/</a></span></li> <li><span class="nobr"><a href= "http://www.entrouvert.com/fr/identite-numerique/liberty-alliance">http://www.entrouvert.com/fr/identite-numerique/liberty-alliance</a></span></li> </ul> <h4 class="heading-1-1-1"><span id="HLeprojetFederID">Le projet FederID</span></h4><br /> <br /> <img src="/xwiki/bin/download/NG/DocLA/bouton_federid.png" alt= "bouton_federid.png" /><br /> <br /> Le projet <span class="wikiexternallink"><a href= "http://www.federid.org">FederID</a></span> vise à offrir une véritable solution de fédération et de gestion des identités entièrement basée sur des logiciels libres. Les briques utilisées sont : <ul class="star"> <li><span class="wikiexternallink"><a href= "http://www.entrouvert.com/fr/identite-numerique/lasso">lasso</a></span> : bibliothèque C gérant les échanges Liberty Alliance et SAML 2.0.</li> <li><span class="wikiexternallink"><a href= "http://www.entrouvert.com/fr/identite-numerique/authentic">Authentic</a></span> : fournisseur d'identité.</li> <li><span class="wikiexternallink"><a href= "http://www.interldap.org">InterLDAP</a></span> : gestion de contenu LDAP (WUI) et partage d'attributs sur un cercle Liberty Alliance (LAAP).</li> <li><span class="wikiexternallink"><a href= "http://wiki.lemonldap.objectweb.orgoverview-fr.html">LemonLDAP::NG</a></span> : WebSSO et gestion centralisée des autorisations.</li> </ul> <h4 class="heading-1-1-1"><span id= "HFonctionnementdeLemonLDAP3A3ANGavecLibertyAlliance">Fonctionnement de LemonLDAP::NG avec Liberty Alliance</span></h4><br /> <br /> LemonLDAP::NG est utilisé comme fournisseur de service (Service Provider). Il va alors faire appel à un fournisseur d'identité pour déléguer l'authentification de l'utilisateur. L'identité locale est associée automatiquement à l'identité principale par un attribut fournit par le fournisseur d'identité dans son assertion : la fédération des comptes est donc automatique !<br /> <br /> L'avantage est qu'une fois l'utilisateur authentifié sur le fournisseur d'identités, il est entré dans le cercle de confiance et peut donc accéder à tous les services, dont le portail LemonLDAP::NG. Ainsi les applications protégées par LemonLDAP::NG deviennent aussi en quelque sorte des fournisseurs de services dans le cercle Liberty Alliance, sans besoin d'implémentation des protocoles Liberty Alliance !<br /> <br /> <img src= "/xwiki/bin/download/NG/DocLA/DIA-ANR-1883-Fonctionnement_LemonLDAP%3A%3ANG_LA-1.png" alt="DIA-ANR-1883-Fonctionnement_LemonLDAP::NG_LA-1.png" /> <ol> <li>L'utilisateur se connecte à une ressource protégée</li> <li>La requête est interceptée par l'agent (handler) LemonLDAP::NG. L'utilisateur n'a pas encore de session SSO ouverte, il est redirigé sur le portail WebSSO.</li> <li>Le portail LemonLDAP est configuré avec le module d'authentification Liberty Alliance, il reçoit la requête de l'utilisateur. Celui-ci peut choisir de s'identifier localement ou d'utiliser Liberty Alliance : si plusieurs fournisseurs d'identités sont référencés, une liste permet à l'utilisateur de sélectionner le sien. Si un seul fournisseur est présent, il est automatiquement sélectionné.</li> <li>L'utilisateur est redirigé vers le fournisseur d'identités sélectionné.</li> <li>Le fournisseur reçoit la requête et présente un formulaire.</li> <li>L'utilisateur renseigne son identifiant et son mot de passe et soumet le formulaire.</li> <li>L'authentification est effectuée sur l'annuaire.</li> <li>Quand l'authentification est validée, le NameIdentifier est transmis à l'utilisateur dans une requête de redirection vers l'adresse Assertion Consumer du portail SSO.</li> <li>L'assertion est reçue par le portail avec le NameIdentifier.</li> <li>Un filtre est appliqué sur l'annuaire pour retrouver les informations de l'utilisateur (DN et habilitations) à partir du NameIdentifier, qui a été injecté au préalable dans l'annuaire.</li> <li>Ces informations sont stockées en session (MySQL, ...).</li> <li>L'utilisateur est redirigé vers l'adresse initiale de la ressource protégée.</li> <li>L'agent détecte le cookie contenant l'identifiant de session.</li> <li>L'habilitation d'accès est vérifiée dans la session.</li> <li>Les requêtes parviennent à la ressource protégée.</li> </ol> <h3 class="heading-1-1"><span id= "HInstallationetparamC3A9trage">Installation et paramétrage</span></h3> <h4 class="heading-1-1-1"><span id= "HConsidC3A9rations">Considérations</span></h4><br /> <br /> Tous les composants sont accessibles par leur nom DNS, considérons donc les noms suivants : <ul class="star"> <li>Fournisseur d'identité : <span class="nobr"><a href= "http://authentic.mydomain.com">http://authentic.mydomain.com</a></span></li> <li>Application protégée : <span class="nobr"><a href= "http://appli.mydomain.com">http://appli.mydomain.com</a></span></li> <li>Portail Websso : <span class="nobr"><a href= "http://websso.mydomain.com">http://websso.mydomain.com</a></span></li> </ul> <h4 class="heading-1-1-1"><span id= "HFournisseurd27identitC3A9">Fournisseur d'identité</span></h4><br /> <br /> Pour que l'architecture fonctionne, il faut disposer d'un serveur d'identité Liberty Alliance. Si aucun n'est déjà installé, il faut alors le faire, avec par exemple le produit <span class="wikiexternallink"><a href= "http://authentic.labs.libre-entreprise.org/">Authentic</a></span>.<br /> <br /> Toute la documentation d'installation se trouve ici : <span class= "nobr"><a href= "http://authentic.labs.libre-entreprise.org/doc/fr/authentic-admin.html">http://authentic.labs.libre-entreprise.org/doc/fr/authentic-admin.html</a></span> <h4 class="heading-1-1-1"><span id="HComposantsLemonLDAP3A3ANG">Composants LemonLDAP::NG</span></h4><br /> <br /> Tous les composants de LemonLDAP::NG doivent être installés normalement, et une configuration correcte doit être activée. <h4 class="heading-1-1-1"><span id="HPortailLibertyAlliance">Portail Liberty Alliance</span></h4><br /> <br /> Le seul composant à adapter est le portail, les autres (handler et manager) fonctionnent sans configuration supplémentaire. <h5 class="heading-1-1-1-1"><span id= "HInstallationdesfichiersspC3A9cifiques">Installation des fichiers spécifiques</span></h5><br /> <br /> Les éléments nécessaires au fonctionnement du portail se trouvent dans le répertoire example/AuthLA des sources du module lemonldap-ng-portal :<br /> <br /> <div class="code"> <pre> # cd lemonldap-ng-X.X.X.X/lemonldap-ng-portal/example/AuthLA # ls -la </pre> </div><br /> <br /> Copier ces fichiers dans le répertoire du portail (par exemple /var/www/lemonldap-ng/web/portal) :<br /> <br /> <div class="code"> <pre> # cp -r * /<span class="java-keyword">var</span>/www/lemonldap-ng/web/portal </pre> </div><br /> <br /> Les fichiers sont les suivants : <ul class="star"> <li>idps.xml : liste des fournisseurs d'identités</li> <li>index.pl : implémentation du portail</li> <li>error403.pl : page d'erreur utilisant les fichiers modèles</li> <li>liberty/ : points d'accès SOAP (liens symboliques vers index.pl)</li> <li>ressources/ : metadata Liberty Alliance</li> <li>ressources/db/ : scripts SQL de création des tables de gestion des identités Liberty Alliance</li> <li>tpl/ : fichiers modèles (HTML Template)</li> <li>tpl/themes : thèmes CSS</li> </ul> <h5 class="heading-1-1-1-1"><span id= "HCrC3A9ationdesmetadataduSP">Création des metadata du SP</span></h5><br /> <br /> Des clés doivent être générées par OpenSSL :<br /> <br /> <div class="code"> <pre> # openssl genrsa -out lemonsp-key-<span class= "java-keyword">private</span>.pem 2048 # openssl rsa -in lemonsp-key-<span class= "java-keyword">private</span>.pem -pubout -out lemonsp-key-<span class= "java-keyword">public</span>.pem # mv *.pem /<span class= "java-keyword">var</span>/www/lemonldap-ng/web/portal/ressources/ </pre> </div><br /> <br /> Remplacer également l'adresse DNS indiquée dans le fichier ressources/lemonsp-metadata.xml :<br /> <br /> <div class="code"> <pre> # sed -i 's/auth.example.com/websso.mydomain.com/' ressources/lemonsp-metadata.xml </pre> </div> <h5 class="heading-1-1-1-1"><span id= "HEnregistrementdeLemonLDAP3A3ANGsurlefournisseurd27identitC3A9s">Enregistrement de LemonLDAP::NG sur le fournisseur d'identités</span></h5><br /> <br /> Les fichiers modifiés ci-dessus doivent être intégrés au fournisseur d'identité, comme indiqué dans la documentation d'administration d'Authentic : <span class="nobr"><a href= "http://authentic.labs.libre-entreprise.org/doc/fr/authentic-admin.html#head-c79163b64fdd684bf07a048f3a26d9736a4d5207"> http://authentic.labs.libre-entreprise.org/doc/fr/authentic-admin.html#head-c79163b64fdd684bf07a048f3a26d9736a4d5207</a></span> <h5 class="heading-1-1-1-1"><span id= "HEnregistrementdufournisseurd27identitC3A9ssurLemonLDAP3A3ANG">Enregistrement du fournisseur d'identités sur LemonLDAP::NG</span></h5><br /> <br /> Les fournisseurs d'identités sont définis dans le fichier idps.xml :<br /> <br /> <div class="code"> <pre> <span class="xml-tag"><laIdpList></span> <span class="xml-tag"><idp name=<span class= "xml-quote">"Identity Provider 1 : Authentic"</span>></span> <span class="xml-tag"><url></span><span class= "nobr"><a href= "http://authentic.mydomain.com">http://authentic.mydomain.com</a></span><span class="xml-tag"></url></span> <span class= "xml-tag"><metadata></span>/path/to/idp1-metadata.xml<span class= "xml-tag"></metadata></span> <span class= "xml-tag"><pubkey></span>/path/to/idp1-key-public.pem<span class= "xml-tag"></pubkey></span> <span class= "xml-tag"><certificate></span>/path/to/idp1-key-public.pem<span class= "xml-tag"></certificate></span> <span class="xml-tag"></idp></span> <span class="xml-tag"></laIdpList></span> </pre> </div> <p class="paragraph"></p>Le paramètres sont les suivants : <ul class="star"> <li>name : nom de l'IdP, qui sera affiché à l'utilisateur</li> <li>metadata : fichier de metadata de l'IdP</li> <li>pubkey : clé publique de l'IdP</li> <li>certificate : certificat de l'IdP</li> </ul> <h5 class="heading-1-1-1-1"><span id= "HParamC3A9trageduportail">Paramétrage du portail</span></h5> <p class="paragraph"></p>Toute la configuration spécifique à Liberty Alliance est située dans le code Perl du portail : <p class="paragraph"></p> <div class="code"> <pre> # Local parameter to set the installation directory my $install_dir = <span class="java-quote">"/<span class= "java-keyword">var</span>/lib/lemonldap-ng/web/portal"</span>; my $var_dir = <span class="java-quote">"/<span class= "java-keyword">var</span>/lib/lemonldap-ng/"</span>;<br /><br />my $portal = Lemonldap::NG::Portal::AuthLA-><span class="java-keyword">new</span>({ configStorage => { type => <span class="java-quote">"File"</span> , dirName => <span class= "java-quote">"$var_dir/config"</span> , } ,<br /><br /> # Liberty Parameters laSp => { certificate => <span class= "java-quote">"$install_dir/ressources/lemonsp-key-<span class= "java-keyword">public</span>.pem"</span> , metadata => <span class= "java-quote">"$install_dir/ressources/lemonsp-metadata.xml"</span> , privkey => <span class= "java-quote">"$install_dir/ressources/lemonsp-key-<span class= "java-keyword">private</span>.pem"</span> , secretkey => <span class= "java-quote">"$install_dir/ressources/lemonsp-key-<span class= "java-keyword">private</span>.pem"</span> , } , laIdpsFile => <span class= "java-quote">"$install_dir/idps.xml"</span> , laStorage => <span class= "java-quote">"Apache::Session::File"</span>, laStorageOptions => { Directory => <span class= "java-quote">"$var_dir/<span class= "java-keyword">var</span>/assertion"</span> , LockDirectory => <span class= "java-quote">"$var_dir/<span class="java-keyword">var</span>/lock"</span> , } , laDebug => 1 , laLdapLoginAttribute => <span class= "java-quote">"uid"</span> ,<br /><br /> # Parameters that permit to access lemonldap::NG::Handler local cache localStorage => 'Cache::FileCache' , localStorageOptions => {} , }); </pre> </div> <p class="paragraph"></p>Certains paramètres sont ceux d'un portail standard LemonLDAP::NG : <ul class="star"> <li>configStorage : stockage de la configuration générale</li> <li>localStorage : stockage du cache local</li> <li>localStorageOptions : options de stockage du cache local</li> </ul>La configuration spécifique est effectuée dans les paramètres suivants : <ul class="star"> <li>$install_dir : répertoire d'installation du portail</li> <li>$var_dir : répertoire de stockage des données</li> <li>laSP : metadata et et clés du SP</li> <li>laIdpsFile : fichier XML de définition des IdPs</li> <li>laStorage : stockage des données Liberty Alliance</li> <li>laStorageOptions : options de stockage des données Liberty Alliance</li> <li>laDebug : activation des traces des fonctions Liberty Alliance</li> <li>laLdapLoginAttribute : attribut LDAP contenant le NameIdentifier renvoyé par l'IdP</li> </ul> <h3 class="heading-1-1"><span id= "HDC3A9monstration">Démonstration</span></h3> <p class="paragraph"></p>Une démonstration en ligne est disponible depuis le site du projet FederID : <span class="wikiexternallink"><a href= "http://federid.objectweb.org/xwiki/bin/view/Main/Demonstration">http://federid.objectweb.org/xwiki/bin/view/Main/Demonstration</a></span> </div> </body> </html>