Utilisation de Liberty Alliance
Pré-requis
Version de LemonLDAP::NG
Le support Liberty Alliance est inclus à LemonLDAP::NG depuis la version 0.9.Lasso
Pour fonctionner, il faut que le binding Perl de la bibliothèque lasso soit installé sur le serveur.
Le téléchargement peut se faire sur la page du projet (http://lasso.entrouvert.org/download/).
Sous Debian, si les dépôts sont activés, l'installation se fait par la commande suivante :
# apt-get install liblasso-perl
Présentation
Liberty Alliance

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.
Voir aussi :
- http://fr.wikipedia.org/wiki/Liberty_Alliance
- http://www.projectliberty.org/
- http://www.entrouvert.com/fr/identite-numerique/liberty-alliance
Le projet FederID

Le projet FederID 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 :
- lasso : bibliothèque C gérant les échanges Liberty Alliance et SAML 2.0.
- Authentic : fournisseur d'identité.
- InterLDAP : gestion de contenu LDAP (WUI) et partage d'attributs sur un cercle Liberty Alliance (LAAP).
- LemonLDAP::NG : WebSSO et gestion centralisée des autorisations.
Fonctionnement de LemonLDAP::NG avec Liberty Alliance
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 !
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 !

- L'utilisateur se connecte à une ressource protégée
- 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.
- 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é.
- L'utilisateur est redirigé vers le fournisseur d'identités sélectionné.
- Le fournisseur reçoit la requête et présente un formulaire.
- L'utilisateur renseigne son identifiant et son mot de passe et soumet le formulaire.
- L'authentification est effectuée sur l'annuaire.
- 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.
- L'assertion est reçue par le portail avec le NameIdentifier.
- 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.
- Ces informations sont stockées en session (MySQL, ...).
- L'utilisateur est redirigé vers l'adresse initiale de la ressource protégée.
- L'agent détecte le cookie contenant l'identifiant de session.
- L'habilitation d'accès est vérifiée dans la session.
- Les requêtes parviennent à la ressource protégée.
Installation et paramétrage
Considérations
Tous les composants sont accessibles par leur nom DNS, considérons donc les noms suivants :
- Fournisseur d'identité : http://authentic.mydomain.com
- Application protégée : http://appli.mydomain.com
- Portail Websso : http://websso.mydomain.com
Fournisseur d'identité
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 Authentic.
Toute la documentation d'installation se trouve ici : http://authentic.labs.libre-entreprise.org/doc/fr/authentic-admin.html
Composants LemonLDAP::NG
Tous les composants de LemonLDAP::NG doivent être installés normalement, et une configuration correcte doit être activée.
Portail Liberty Alliance
Le seul composant à adapter est le portail, les autres (handler et manager) fonctionnent sans configuration supplémentaire.
Installation des fichiers spécifiques
Les éléments nécessaires au fonctionnement du portail se trouvent dans le répertoire example/AuthLA des sources du module lemonldap-ng-portal :
# cd lemonldap-ng-X.X.X.X/lemonldap-ng-portal/example/AuthLA # ls -la
Copier ces fichiers dans le répertoire du portail (par exemple /var/www/lemonldap-ng/web/portal) :
# cp -r * /var/www/lemonldap-ng/web/portal
Les fichiers sont les suivants :
- idps.xml : liste des fournisseurs d'identités
- index.pl : implémentation du portail
- error403.pl : page d'erreur utilisant les fichiers modèles
- liberty/ : points d'accès SOAP (liens symboliques vers index.pl)
- ressources/ : metadata Liberty Alliance
- ressources/db/ : scripts SQL de création des tables de gestion des identités Liberty Alliance
- tpl/ : fichiers modèles (HTML Template)
- tpl/themes : thèmes CSS
Création des metadata du SP
Des clés doivent être générées par OpenSSL :
# openssl genrsa -out lemonsp-key-private.pem 2048 # openssl rsa -in lemonsp-key-private.pem -pubout -out lemonsp-key-public.pem # mv *.pem /var/www/lemonldap-ng/web/portal/ressources/
Remplacer également l'adresse DNS indiquée dans le fichier ressources/lemonsp-metadata.xml :
# sed -i 's/auth.example.com/websso.mydomain.com/' ressources/lemonsp-metadata.xml
Enregistrement de LemonLDAP::NG sur le fournisseur d'identités
Les fichiers modifiés ci-dessus doivent être intégrés au fournisseur d'identité, comme indiqué dans la documentation d'administration d'Authentic : http://authentic.labs.libre-entreprise.org/doc/fr/authentic-admin.html#head-c79163b64fdd684bf07a048f3a26d9736a4d5207
Enregistrement du fournisseur d'identités sur LemonLDAP::NG
Les fournisseurs d'identités sont définis dans le fichier idps.xml :
<laIdpList> <idp name="Identity Provider 1 : Authentic"> <url>http://authentic.mydomain.com</url> <metadata>/path/to/idp1-metadata.xml</metadata> <pubkey>/path/to/idp1-key-public.pem</pubkey> <certificate>/path/to/idp1-key-public.pem</certificate> </idp> </laIdpList>
- name : nom de l'IdP, qui sera affiché à l'utilisateur
- metadata : fichier de metadata de l'IdP
- pubkey : clé publique de l'IdP
- certificate : certificat de l'IdP
Paramétrage du portail
Toute la configuration spécifique à Liberty Alliance est située dans le code Perl du portail :# Local parameter to set the installation directory my $install_dir = "/var/lib/lemonldap-ng/web/portal"; my $var_dir = "/var/lib/lemonldap-ng/";
my $portal = Lemonldap::NG::Portal::AuthLA->new({ configStorage => { type => "File" , dirName => "$var_dir/config" , } ,
# Liberty Parameters laSp => { certificate => "$install_dir/ressources/lemonsp-key-public.pem" , metadata => "$install_dir/ressources/lemonsp-metadata.xml" , privkey => "$install_dir/ressources/lemonsp-key-private.pem" , secretkey => "$install_dir/ressources/lemonsp-key-private.pem" , } , laIdpsFile => "$install_dir/idps.xml" , laStorage => "Apache::Session::File", laStorageOptions => { Directory => "$var_dir/var/assertion" , LockDirectory => "$var_dir/var/lock" , } , laDebug => 1 , laLdapLoginAttribute => "uid" ,
# Parameters that permit to access lemonldap::NG::Handler local cache localStorage => 'Cache::FileCache' , localStorageOptions => {} , });
- configStorage : stockage de la configuration générale
- localStorage : stockage du cache local
- localStorageOptions : options de stockage du cache local
- $install_dir : répertoire d'installation du portail
- $var_dir : répertoire de stockage des données
- laSP : metadata et et clés du SP
- laIdpsFile : fichier XML de définition des IdPs
- laStorage : stockage des données Liberty Alliance
- laStorageOptions : options de stockage des données Liberty Alliance
- laDebug : activation des traces des fonctions Liberty Alliance
- laLdapLoginAttribute : attribut LDAP contenant le NameIdentifier renvoyé par l'IdP