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



liberty_alliance_logo_jpeg.jpg

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 :

Le projet FederID



bouton_federid.png

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 :

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 !

DIA-ANR-1883-Fonctionnement_LemonLDAP::NG_LA-1.png
  1. L'utilisateur se connecte à une ressource protégée
  2. 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.
  3. 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é.
  4. L'utilisateur est redirigé vers le fournisseur d'identités sélectionné.
  5. Le fournisseur reçoit la requête et présente un formulaire.
  6. L'utilisateur renseigne son identifiant et son mot de passe et soumet le formulaire.
  7. L'authentification est effectuée sur l'annuaire.
  8. 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.
  9. L'assertion est reçue par le portail avec le NameIdentifier.
  10. 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.
  11. Ces informations sont stockées en session (MySQL, ...).
  12. L'utilisateur est redirigé vers l'adresse initiale de la ressource protégée.
  13. L'agent détecte le cookie contenant l'identifiant de session.
  14. L'habilitation d'accès est vérifiée dans la session.
  15. 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é



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 :
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>

Le paramètres sont les suivants :
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 => {} , });

Certains paramètres sont ceux d'un portail standard LemonLDAP::NG : La configuration spécifique est effectuée dans les paramètres suivants :

Démonstration

Une démonstration en ligne est disponible depuis le site du projet FederID : http://federid.objectweb.org/xwiki/bin/view/Main/Demonstration