Formation Administration et sécurité Le WebSSO LemonLDAP::NG Auteurs : Clément OUDOT LINAGORA Formation formation@linagora.com
Licence Paternité - Pas d'utilisation Commerciale - Partage des Conditions Initiales à l'identique 2.0 France Vous êtes libres : de reproduire, distribuer et communiquer cette création au public, de modifier cette création. Selon les conditions suivantes : Paternité. Vous devez citer le nom de l'auteur original. Pas d'utilisation Commerciale. Vous n'avez pas le droit d'utiliser cette création à des fins commerciales. Partage des Conditions Initiales à l'identique. Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identique à celui-ci. À chaque réutilisation ou distribution, vous devez faire apparaître clairement aux autres les conditions contractuelles de mise à disposition de cette création. Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits. Ce qui précède n'affecte en rien vos droits en tant qu'utilisateur (exceptions au droit d'auteur : copies réservées à l'usage privé du copiste, courtes citations, parodie...) 2
Pourquoi LINAGORA met ce support sous licence Creative Commons Volonté de contribuer activement à l'essor du logiciel libre Promouvoir l'échange et favoriser l'émulation communautaire Assurer la pérennité de l'industrie logiciel libre et ne comptabiliser que la Valeur Ajoutée (le formateur) Partager le savoir et la connaissance à une vaste échelle LINAGORA croit au Libre! 3
Présentation du formateur Parcours du formateur 4
LINAGORA, premier EOS Créateur des concepts SS2L (Société de Services en Logiciels Libres) et TM2L (Tierce Maintenance Logiciel Libre), LINAGORA se définit désormais comme un Éditeur Orienté Service (EOS). LINAGORA propose une Open Source Software Assurance (OSSA) sur 150 logiciels libres : Prêts à l'industrialisation, sur une plate-forme unique : le 08000LINUX.com. Avec garantie de service contractuelle : en cas de bug, LINAGORA s engage au résultat sur des délais de résolution. Gestion de la feuille de route du logiciel pour le compte du client et s engage au reversement des développements. LINAGORA apporte également son expertise sur toute une gamme de services professionnels et de formations au travers de LINAGORA Formation. 5
LINAGORA Formation 7 années d'expérience, au service des technologies libres et Open Source 40 modules de formation répartis au travers de 7 filières Un cadre agréable, au cœur de Paris Deux salles de formation climatisées pouvant accueillir jusqu'à 10 stagiaires. 2006 : Plus de 150 stages effectués 2006 : Plus de 900 stagiaires Une satisfaction moyenne client de 18/20 Une note moyenne formateur de 16,27/20 6
Filières de formations Développement Web Linux embarqué Administration et sécurité J2EE OpenSource Les basiques Bases de données Bureautique OpenOffice.org 7
Organisation générale et planning 09h30 : début des cours 10h30 : pause du matin 10h45 : reprise des cours 12h00 : pause déjeuner 13h00 : reprise des cours 15h00 : pause de l'après-midi 15h15 : reprise des cours 17h30 : fin de journée 17h30 : libre discussion avec le formateur Introduction Installation Configuration standard Intégration des applications Fonctionnalités avancées : CDA SOAP SSL Liberty Alliance 8
Sommaire Introduction au WebSSO Installation Configuration Intégration d'une application Fonctionnalités avancées 9
Définition du WebSSO SSO signifie «Single Sign On», qui peut se traduire en français par «authentification unique». L'objectif d'une architecture informatique SSO est qu'un utilisateur s'authentifie une première fois pour ouvrir sa session de travail et accède ensuite à toutes ses applications sans rentrer de nouveau son (ou ses) mot(s) de passe. Le SSO regroupe donc plusieurs fonctionnalités : Couple identifiant/mot de passe unique Transmission transparente des informations de session aux applications Gestion des profils applicatifs, c'est-à-dire qui accède à quoi Le SSO n'empêche pas un utilisateur d'avoir plusieurs couples identifiant/mot de passe, seulement il n'en utilise qu'un pour s'authentifier, les autres sont liés par session et communiqués aux applications. 10
Modes de SSO SSO par agent : Un agent est installé sur le poste client C'est l'agent qui intercepte les flux des applications et pousse les mots de passe Mode utilisé généralement pour les clients lourds, pas pour le WebSSO SSO par délégation : Un agent est installé sur le serveur d'application Cet agent intercepte les requêtes à destination de l'application, et redirige l'utilisateur sur le portail si ce dernier n'a pas de session SSO active SSO par mandataire inverse (reverse-proxy) : Le serveur d'application n'est pas accédé directement par les utilisateur, mais seulement par le portail WebSSO C'est le portail qui vérifie la session SSO de l'utilisateur et qui joue ensuite le rôle de mandataire entre l'utilisateur et l'application 11
SSO par agent 12
SSO par délégation 13
SSO par mandataire inverse 14
HTTP - Présentation HTTP signifie «HyperText Transfer Protocol». La version 1.0 date de 1996, la version 1.1 (actuelle) de 1997. Le protocole définit les échanges entre un client HTTP (navigateur web) et un serveur HTTP. Le serveur délivre au client des ressources identifiées par une URL («Uniform Resource Locator»). 15
HTTP - Requête Un requête HTTP se découpe en : une ligne de requête, comprenant trois champs séparés par des espaces : la méthode (GET, HEAD, POST, PUT, DELETE,...) l'url la version HTTP (HTTP/1.0, HTTP/1.1,...) des lignes d'en-têtes (headers), avec un couple «attribut: valeur» par ligne (attributs courants : User-Agent, Accept-Encoding,...) une ligne vide le corps de la requête, généralement vide mais pouvant contenir les attributs et les valeurs d'un formulaire utilisant la méthode POST 16
HTTP - Réponse Une réponse HTTP se découpe en : une ligne de statut, comprenant trois champs séparés par des espaces : la version HTTP (HTTP/1.0, HTTP/1.1,...) le code de réponse (200, 403, 404,...) le message de réponse (OK, FORBIDDEN, NOT FOUND,...) des lignes d'en-têtes (headers), avec un couple «attribut: valeur» par ligne (attributs courants : Location, Content-Type,...) une ligne blanche le corps de la réponse, qui contient le document demandé 17
HTTP - Exemple GET http://www.linagora.com HTTP/1.1 Accept: text/html User-Agent: Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.7.6) HTTP/1.1 200 OK Date: Thu, 13 Mar 2008 15:05:29 GMT Server: Apache Content-Length: 264 Content-Type: text/html; charset=iso-8859-1 <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr" dir="ltr"> <head> <title>linagora, integrateur de reference sur le marche des logiciels libres</title>... </html> 18
HTTP - Cookie Le protocole HTTP est dit «sans état» (stateless) car d'une requête à l'autre, aucune information de connexion n'est conservée. Le problème peut être contourné : connexions persistantes en HTTP 1.1 sessions côté serveur cookies côté client Les cookies sont des fichiers textes de 4096 octets maximum stockés sur le disque dur du client. L'instauration du cookie se fait en trois étapes : requête simple du client réponse du serveur avec un champ d'en-tête «Set-cookie» requête du client avec un champ d'en-tête «Cookie» 19
Présentation de LemonLDAP (et ::NG) LemonLDAP est un ensemble de scripts et de modules Perl utilisés à travers mod_perl et le serveur HTTP Apache LemonLDAP et LemonLDAP::NG sont des logiciels libres, les projets sont hébergés chez OW2 : http://lemonldap.objectweb.org LemonLDAP a été créé par Eric German, du Ministère des Finances La version ::NG a été écrite par Xavier Guimard, de la Gendarmerie Nationale Le principe général est d'utiliser un annuaire LDAP pour : authentifier l'utilisateur (vérification du mot de passe) effectuer un contrôle d'accès (selon les attributs LDAP de l'utilisateur) approvisionner les applications (par transmissions des attributs LDAP dans les entêtes HTTP) LemonLDAP::NG a été choisi pour le projet FederID (http://www.federid.org) et bénéficie d'une possibilité d'authentification Liberty Alliance 20
Fonctionnement général 21
Contenu du programme LemonLDAP::NG LemonLDAP fournit trois types de modules Perl : Lemonldap::NG::Portal : gestion des accès LDAP et de la création des sessions Lemonldap::NG::Handler : protection des hôtes virtuels et application des règles d'accès Lemonldap::NG::Manager : interface graphique de configuration Ces modules doivent être instanciés dans des scripts Perl : Une page d'accueil du portail, affichant un formulaire d'authentification ou la liste des applications disponibles L'application Manager permettant l'accès graphique à la configuration Sur chaque serveur protégé un module Handler doit également être instancié D'autres pages peuvent être créées, par exemple des pages gérant les accès refusés LemonLDAP::NG fournit des exemples de tous ces scripts, ils peuvent être utilisés tels quels ou personnalisés 22
Bases Trois bases de données sont nécessaires : La base de configuration : par défaut, il s'agit d'un simple répertoire, mais on peut utiliser une base de donnée pour permettre le fonctionnement si tous les éléments ne se trouvent pas sur le même serveur, L'annuaire LDAP : outre les authentifications (qui peuvent être effectuées par un autre moyen), il est utilisé pour récupérer les caractéristiques de l'utilisateur et calculer ses droits, La base des sessions : Lemonldap::NG utilise les modules Apache::Session pour gérer les sessions. Par défaut, c'est le module Apache::Session::File qui est utilisé et donc cette base est un simple répertoire. En utilisant Apache::Session::MySQL par exemple, la base devient accessible au travers du réseau permettant le déploiement de la solution sur plusieurs serveurs. 23
Système de stockage des sessions Lemonldap::NG utilise 3 niveaux de cache pour les données des utilisateurs authentifiés : un module Apache::Session::* au choix utilisé par le portail lemonldap::ng::portal pour stocker les données après authentification, un module Cache::Cache* au choix utilisé par l'agent Lemonldap::NG::Handler pour partager les données entre les threads et les processus d'apache et bien sur entre les hôtes virtuels hébergés sur le même serveur, les variables internes à l'agent Lemonldap::NG::Handler : si le même utilisateur utilise de nouveau le même thread ou processus, aucune requête n'est nécessaire pour calculer le droit d'accès. Ceci est particulièrement intéressant avec le système de connexions persistantes du protocole HTTP/1.1 (Keep-Alive). 24
Sommaire Introduction au WebSSO Installation Configuration Intégration d'une application Fonctionnalités avancées 25
Méthodes d'installation Sous Debian : Utilisation du dépôt Debian testing (deb ftp.fr.debian.org/debian testing main) apt-get install lemonldap-ng Sur tous types d'os : Téléchargement de l'archive (wget) Extraction (tar) Compilation (make) Tests (make test) Installation (make install) Attention aux dépendances : Apache2 et mod_perl2 doivent être installés (et mod_perl2 activé) Différents modules Perl doivent obligatoirement être installés D'autres modules sont facultatifs (SOAP, CAS, Lasso,...) 26
Organisation des fichiers sous Debian /usr/share/doc /usr/share/doc/man /etc/lemonldap-ng LemonLDAP::NG /usr/share/lemonldap-ng /var/lib/lemonldap-ng /usr/share/perl5/lemonldap-ng 27
Installation avancée Chaque module peut être installé séparément : tar xzf lemonldap-ng-*.tar.gz cd lemonldap-ng-*/lemonldap-ng-(portal Handler Manager) perl Makefile.PL && make && make test sudo make install Exemple : installation du module Handler uniquement sur un serveur d'application distinct du portail Si une base de données (par exemple MySQL) est utilisé pour le stockage des sessions et/ou de la configuration, les tables suivantes doivent être créées : lmconfig sessions (sur le modèle imposé par Apache::Session) 28
Création du Manager #!/usr/bin/perl manager/index.pl use Lemonldap::NG::Manager; my $h = Lemonldap::NG::Manager->new( { configstorage => { type => "File", dirname => "/opt/lemonldapng/var/configuration/", }, dhtmlxtreeimagelocation => "imgs/", } ) or die "Unable to start"; $h->doall(); 29
Création du portail #!/usr/bin/perl portal/index.pl use HTML::Template; use Lemonldap::NG::Portal::SharedConf my $tpl_dir = "/opt/lemonldapng/portal" ; my $portal = Lemonldap::NG::Portal::SharedConf->new( { configstorage => { type => "File", dirname => "/opt/lemonldapngi/var/configuration/", }, } ); if ( $portal->process() ) { print $portal->header; my $template = HTML::Template->new( filename => "$tpl_dir/menu.tpl"); $template->param( AUTH_ERROR => $portal->error." : ".$portal->{user} ); print $template->output; } else { print $portal->header; my $template = HTML::Template->new( filename => "$tpl_dir/index.tpl"); $template->param( AUTH_ERROR => $portal->error ); $template->param( AUTH_URL => $portal->param('url') ); print $template->output; } 30
Création du Handler package Handler; handler/handler.pm use strict ; use Lemonldap::NG::Handler::SharedConf qw(:all) ; our $VERSION = '0.01' ; our @ISA = qw(lemonldap::ng::handler::sharedconf) ; *EXPORT_TAGS = *Lemonldap::NG::Handler::SharedConf::EXPORT_TAGS ; *EXPORT_OK = *Lemonldap::NG::Handler::SharedConf::EXPORT_OK ; *EXPORT = *Lemonldap::NG::Handler::SharedConf::EXPORT ; PACKAGE ->init ({ configstorage => { type => "File", dirname => "/opt/lemonldapng/var/configuration/", }, localstorage => 'Cache::FileCache', localstorageoptions => {}, https => '0', }) ; 1; 31
Sommaire Introduction au WebSSO Installation Configuration Intégration d'une application Fonctionnalités avancées 32
Localisation de la configuration Les paramètres de configuration sont répartis à plusieurs endroits : Manager : l'interface principale de configuration Le paramètre configstorage des fichiers portail, Manager et Handler La déclaration des hôtes virtuels Dans le cas d'un architecture en délégation, la configuration doit être partagée. Plusieurs options possibles : Par synchronisation des répertoires Par accès distant MySQL Par SOAP 33
Paramètres généraux dans le Manager Paramètres d'authentification Type d'authentification Portail Cookie sécurisé (SSL) Nom du cookie Domaine Attributs LDAP à exporter Paramètres LDAP Base de recherche LDAP Port du serveur LDAP Serveur LDAP Compte de connexion LDAP Mot de passe LDAP 34
Paramètres généraux dans le Manager Macros Stockage des sessions Module Apache::Session Paramètres du module Apache::Session Donnée à inscrire dans les journaux d'apache Groupes d'utilisateurs 35
Paramètres des applications dans le Manager test.example.com En-têtes HTTP... Règles Auth-User Auth-Name default ^/protected... 36
Utilisation des macros et des groupes Les macros permettent de calculer des expressions régulières disponibles ensuite pour paramétrer les hôtes virtuels. Par exemple : nom_complet => $givenname. " ". $surname La variable $nom_complet est alors disponible Les groupes peuvent être de deux types : Groupes définis localement dans le Manager. Par exemple : group1 => $uid eq "user1" or $uid eq "user2" or $uid eq "user3" La variable $groups contient alors group1 si l'utilisateur est user1, user2 ou user3 Groupes définis dans l'annuaire LDAP : Configuration de ldapgroupbase avec le DN de la branche des groupes La variable $groups contient alors les CN des groupes auxquels l'utilisateur appartient 37
Hôte virtuel pour le portail et le Manager <VirtualHost *> ServerName websso.linagora.com DocumentRoot /opt/lemonldapng/portal DirectoryIndex index.pl <Files ~ "\.(pl)$"> SetHandler perl-script PerlHandler ModPerl::Registry PerlSendHeader On </Files> <Directory /opt/lemonldapng/portal> AllowOverride None Options +ExecCGI -Indexes +FollowSymLinks +MultiViews </Directory> Alias /manager /opt/lemonldapng/manager <Directory /opt/lemonldapng/manager> AllowOverride None Options +ExecCGI +FollowSymLinks -Indexes </Directory> LogLevel warn ErrorLog /var/log/httpd/lemonldapng-error.log CustomLog /var/log/httpd/lemonldapng-access.log combined </VirtualHost> portal.conf 38
Hôte virtuel pour une application protégée PerlRequire /opt/lemonldapng/handler/handler.pm <Virtualhost *> ServerName appli.linagora.com DocumentRoot /var/www/appli PerlOptions +GlobalRequest PerlHeaderParserHandler Handler <Directory /var/www/appli> AllowOverride None Options -Indexes +FollowSymLinks +MultiViews Order Allow,Deny Allow from all </Directory> <Location /logout> PerlHeaderParserHandler Handler->logout </Location> LogLevel warn ErrorLog /var/log/apache2/appli-error.log CustomLog /var/log/apache2/appli-access.log combined </VirtualHost> appli.conf 39
Sommaire Introduction au WebSSO Installation Configuration Intégration d'une application Fonctionnalités avancées 40
Intégration d'une application Pré-requis : Accès au code source et possibilité de le modifier disposer d'un langage permettant la lecture des en-têtes HTTP Désactiver le formulaire d'authentification local Lire les en-têtes HTTP, en particulier celle fournissant l'identité de l'utilisateur Si nécessaire : associer l'identité de l'utilisateur à l'identité locale Si nécessaire : créer à la volée une entrée locale si inexistante Si nécessaire : désactiver la gestion locale des autorisations 41
Lecture des en-têtes en PHP <?php headers.php // // Function to collect all headers // function getheaders() { foreach ($_SERVER as $h => $v ) { if( ereg( 'HTTP_(.+)', $h, $hp ) ) $headers[$hp[1]] = $v ; } return $headers; } // Call the function $headers = getheaders() ; // Print headers foreach ($headers as $k => $v) { echo "$k = $v<br/>\n" ; }?> 42
Ajout d'une application dans le WebSSO Application préparée à recevoir les en-têtes HTTP Utilisation du Manager pour créer un nouvel hôte virtuel dans la configuration LemonLDAP::NG : Nom de l'hôte virtuel Règles d'accès Informations transmises Configuration du serveur Apache2 : Ajout d'un hôte virtuel ou reprise de l'existant Ajout des paramètres d'appel du Handler Choix d'architecture important : Mode mandataire inverse Mode délégation 43
Configuration pour le mandataire inverse PerlRequire /opt/lemonldapng/handler/handler.pm <Virtualhost *> ServerName appli.linagora.com DocumentRoot /var/www/appli PerlOptions +GlobalRequest PerlHeaderParserHandler Handler ProxyPass / http://serveur-reel/ ProxyPassReverse / http://serveur-reel/ <Location /logout> PerlHeaderParserHandler Handler->logout </Location> LogLevel warn ErrorLog /var/log/apache2/appli-error.log CustomLog /var/log/apache2/appli-access.log combined </VirtualHost> appli.conf 44
Sommaire Introduction au WebSSO Installation Configuration Intégration d'une application Fonctionnalités avancées 45
Présentation du X-domain Un domaine est constitué d'un nom (linagora, yahoo, google,...) et d'une extension, appelée aussi suffixe (fr, de, com, net,...). La spécification des cookies précise qu'un cookie doit être déclaré sur un domaine et envoyé à aucun autre. Les navigateurs refusent d'ailleurs de transmettre un cookie à un domaine différent de celui qui l'a émis. Certaines applications sont parfois réparties sur plusieurs domaines, elles utilisent alors des mécanismes dits de «cross-domain». Plusieurs solutions techniques permettent de faire du cross-domain, la plus répandue consiste à faire transiter le numéro de session dans l'url. L'architecture cross-domain suppose généralement l'existence d'un serveur maître unique, réalisant l'authentification et la mise en session des informations, et de un ou plusieurs esclaves, utilisant le numéro de session transmis pour retrouver les informations. Le cross-domain se configure dans LemonLDAP:NG en utilisant le module Lemonldap::NG::Portal::CDA 46
Utilisation de SOAP SOAP signifie Simple Object Access Protocol SOAP peut être utilisé sur des protocoles standards comme HTTP et SMTP Dans LemonLDAP::NG, les modules SOAP permettent : De lire et écrire la configuration De créer, modifier, supprimer et lire les session L'avantage est de permettre la centralisation de la configuration et des sessions tout en les rendant disponibles à des modules LemonLDAP::NG externes L'utilisation de SOAP requiert : Le module Perl SOAP::Lite La création de scripts SOAP pour l'accès à la configuration et aux sessions La protection par Apache de ces scripts La modification des composants distants pour indiquer le point d'accès SOAP Documentation complète : http://wiki.lemonldap.objectweb.org/xwiki/bin/view/ng/docsoap 47
Exemple d'accès SOAP aux sessions Module Lemonldap::NG::Manager::Apache::Session::SOAP Module Lemonldap::NG::Manager::Apache::Session::SOAP Portail Secondaire Portail Principal Agent (Handler) Sessions Web Service Application protégée Module Lemonldap::NG::Manager::SOAPServer 48
Script d'accès SOAP aux sessions #!/usr/bin/perl sessions.pl use Lemonldap::NG::Manager::SOAPServer; Lemonldap::NG::Manager::SOAPServer->start ( realsessionstorage => "Apache::Session::File", realsessionstorageoptions => { Directory => "/tmp", }, type => "sessions", AuthorizedFunctions => "new get set delete", ); 49
Script d'accès SOAP aux sessions #!/usr/bin/perl config.pl use Lemonldap::NG::Manager::SOAPServer; Lemonldap::NG::Manager::SOAPServer->start( configstorage => { type => 'DBI', dbichain => "DBI:mysql:database=lemonldapng;host=127.0.0.1", dbiuser => "ssoadmin", dbipassword => "ssopasswd", dbitable => "lmconfig", } ); 50
Sécurisation de LemonLDAP::NG LemonLDAP::NG permet différents types de sécurisation : Protection du portail et du manager en HTTPS Protection d'une application protégée en HTTPS Utilisation du mandataire inverse avec HTTPS (flux amont et aval) Accès à l'annuaire en LDAPS Accès SOAP en HTTPS Protection du manager et des points d'accès SOAP par authentification LDAPS 51
Paramètres de configuration Accès HTTPS à un hôte virtuel : SSLEngine on SSLCACertificateFile /opt/openssl/ca/ca.pem SSLCertificateFile /opt/openssl/serveur.pem SSLCertificateKeyFile /opt/openssl/serveur.key Clause spécifique à mod_proxy pour activer le SSL : SSLProxyEngine on Paramétrage d'un Handler (dans le code du Handler) pour protéger une application en HTTPS : https => 1 52
Protection du manager par LDAP Alias /manager /opt/lemonldapng/manager portal.conf <Directory /opt/lemonldapng/manager> AllowOverride None Options +ExecCGI +FollowSymLinks -Indexes # Parametres d'authentification LDAP AuthType Basic AuthName "Protection du Manager WebSSO" AuthBasicProvider ldap AuthzUserAuthoritative On AuthzLDAPAuthoritative Off # Adresse et parametres de la recherche AuthLDAPBindDN ou=lemonldapng,ou=applications,dc=linagora,dc=com # Mettre le mot de passe! AuthLDAPBindPassword PASS_LEMONLDAP AuthLDAPURL ldap://127.0.0.1:389/dc=linagora,dc=com?mail?sub?(objectclass=*) Require ldap-group cn=websso-admins,ou=groupes,dc=linagora,dc=com </Directory> 53
Modes d'authentification Lemonldap::NG fournit plusieurs modes d'authentification : 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. 54
Liberty Alliance 2 8 12 4 13 1 5 9 3 Agent (Handler) Fournisseur d'identités Identifiant Mot de passe 6 Assertion Consumer Portail WebSSO 14 15 Application protégée 7 LDAP 10 11 Sessions 55
Liberty Alliance 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. 56
Liberty Alliance 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. 57
Formation Merci de votre attention Administration et sécurité LINAGORA Formation formation@linagora.com