« SSO » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
 
<div class="mw-parser-output"><h1> Single Sign-On</h1>
= Single Sign-On =
<h2> Liens</h2>
 
<p>Panorama de solutions&#160;: <a href="http://www.open-source-guide.com/Solutions/Developpement-et-couches-intermediaires/Authentification-federation-et-de-gestion-d-identite" alt="http://www.open-source-guide.com/Solutions/Developpement-et-couches-intermediaires/Authentification-federation-et-de-gestion-d-identite" title="http://www.open-source-guide.com/Solutions/Developpement-et-couches-intermediaires/Authentification-federation-et-de-gestion-d-identite">http://www.open-source-guide.com/Solutions/Developpement-et-couches-intermediaires/Authentification-federation-et-de-gestion-d-identite</a>
== Liens ==
</p>
 
<h2> Présentation</h2>
Panorama de solutions : http://www.open-source-guide.com/Solutions/Developpement-et-couches-intermediaires/Authentification-federation-et-de-gestion-d-identite
<p>Le SSO consiste à centraliser les authentifications; on uniformise la sécurité de l'authentification, quelle que soit la plateforme. On peut ensuite appliquer une politique de mdp et gérer l'authentification via des protocoles normalisés et sécurisés (LDAP, Kerberos, CAS, RADIUS, etc). Le SSO est un début pour passer ensuite à l'authentification multi-facteurs. Les buts sont&#160;:
 
</p>
== Présentation ==
<ul><li>Amélioration de la sécurité </li>
 
<li>Simplifier l'utilisation </li>
Le SSO consiste à centraliser les authentifications; on uniformise la sécurité de l'authentification, quelle que soit la plateforme. On peut ensuite appliquer une politique de mdp et gérer l'authentification via des protocoles normalisés et sécurisés (LDAP, Kerberos, CAS, RADIUS, etc). Le SSO est un début pour passer ensuite à l'authentification multi-facteurs. Les buts sont&nbsp;:
<li>Faciliter les opérations pour les gestionnaires </li></ul>
 
<p>AAA&#160;:
*Amélioration de la sécurité  
</p>
*Simplifier l'utilisation  
<ul><li>Authentification&#160;: Prouver son identité </li>
*Faciliter les opérations pour les gestionnaires  
<li>Authorization&#160;: Qu'est-ce que j'ai le droit de faire </li>
 
<li>Accounting&#160;: Qu'est-ce que je fais </li></ul>
AAA&nbsp;:
<p>On a aussi une notion de single logout&#160;: je me peut me loguer et me déloguer de manière globale, ce qui est moins évident, parce que chaque application gère son authentification de façon globale. Il faut donc gérer une base centrale des applications qui ont une session d’authentification avec l’utilisateur et mémoriser une URL de déconnexion.–Le single logoutest complexe donc peu implémenté...
 
</p>
*Authentification&nbsp;: Prouver son identité  
<h2> Technos utilisées</h2>
*Authorization&nbsp;: Qu'est-ce que j'ai le droit de faire  
<ul><li>HTTP header&#160;: Pour les application proxifiées. On protège les apps, contrôle les urls, et on crée des variables multiples... (???) On a pas besoin de SLO.  
*Accounting&nbsp;: Qu'est-ce que je fais  
<ul><li><img src="/mediawiki/images/3/34/Http_header.png" _fck_mw_filename="Http header.png" _fck_mw_origimgwidth="781" _fck_mw_origimgheight="351" alt="RTENOTITLE" title="RTENOTITLE" style="vertical-align:middle;" />   </li></ul></li>
 
<li>SAML (Security Assertion Markup Language)&#160;:standard informatique définissant un protocole pour échanger des informations liées à la sécurité. Basé sur le langage XML, SAML a été développé par OASIS. SAML propose l'authentification unique (en anglais single sign-on ou SSO) sur le web. De cette manière, un utilisateur peut naviguer sur plusieurs sites différents en ne s'authentifiant qu'une seule fois, sans pour autant que ces sites aient accès à des informations trop confidentielles. (wikipédia) </li>
On a aussi une notion de single logout&nbsp;: je me peut me loguer et me déloguer de manière globale, ce qui est moins évident, parce que chaque application gère son authentification de façon globale. Il faut donc gérer une base centrale des applications qui ont une session d’authentification avec l’utilisateur et mémoriser une URL de déconnexion.–Le single logoutest complexe donc peu implémenté...
<li>Authentification formulaire&#160;: Elle est utilisée par les applications sans SSO possible, ne permet pas de SLO, et lente et non recommandée. De plus, on doit stocker les mdp utilisateurs... </li>
 
<li>Il reste aussi CAS, OpenID, WS-federation... </li></ul>
== Technos utilisées ==
<h1> LDAP</h1>
 
<p>cf&#160;: <a href="Protocoles">Protocoles</a>
*HTTP header&nbsp;: Pour les application proxifiées. On protège les apps, contrôle les urls, et on crée des variables multiples... (???) On a pas besoin de SLO.  
</p><p>Un annuraire LDAP contient de nombreuses informations relatives aux personnes&#160;: compte, mdp, etc; mais aussi aux structures. Il sert au contrôle d'accès (en donnant différents droits sur différents services). Un tas de services s'appuient sur LDAP, chez Windows comme chez Unix.
**[[File:Http header.png|RTENOTITLE]]    
</p>
*SAML (Security Assertion Markup Language)&nbsp;:standard informatique définissant un protocole pour échanger des informations liées à la sécurité. Basé sur le langage XML, SAML a été développé par OASIS. SAML propose l'authentification unique (en anglais single sign-on ou SSO) sur le web. De cette manière, un utilisateur peut naviguer sur plusieurs sites différents en ne s'authentifiant qu'une seule fois, sans pour autant que ces sites aient accès à des informations trop confidentielles. (wikipédia)  
<h2> Recommandations</h2>
*Authentification formulaire&nbsp;: Elle est utilisée par les applications sans SSO possible, ne permet pas de SLO, et lente et non recommandée. De plus, on doit stocker les mdp utilisateurs...  
<p>Recommandations nationales SUPANN (juin 2003), pour que les annuaires de la communauté 'Education Recherche' partagent un modèle identique:
*Il reste aussi CAS, OpenID, WS-federation...  
</p>
 
<ul><li>assurer l'interopérabilité des différents annuaires (ENT), </li>
= LDAP =
<li>faciliter la mise en place d'un méta-annuaire national </li></ul>
 
<p>LDAP a une structure arborescente&#160;:
cf&nbsp;: [[Protocoles|Protocoles]]
</p><p><img src="/mediawiki/images/4/4e/Ldap_struc.png" _fck_mw_filename="Ldap struc.png" _fck_mw_origimgwidth="960" _fck_mw_origimgheight="482" alt="RTENOTITLE" title="RTENOTITLE" style="vertical-align:middle;" />
 
</p><p>Exemple d'une entrée 'personnel'&#160;:
Un annuraire LDAP contient de nombreuses informations relatives aux personnes&nbsp;: compte, mdp, etc; mais aussi aux structures. Il sert au contrôle d'accès (en donnant différents droits sur différents services). Un tas de services s'appuient sur LDAP, chez Windows comme chez Unix.
</p>
 
== Recommandations ==
 
Recommandations nationales SUPANN (juin 2003), pour que les annuaires de la communauté 'Education Recherche' partagent un modèle identique:
 
*assurer l'interopérabilité des différents annuaires (ENT),  
*faciliter la mise en place d'un méta-annuaire national  
 
LDAP a une structure arborescente&nbsp;:
 
[[File:Ldap struc.png|RTENOTITLE]]
 
Exemple d'une entrée 'personnel'&nbsp;:
<pre>dn: uid=declercq,ou=people,dc=univ-lille1,dc=fr
<pre>dn: uid=declercq,ou=people,dc=univ-lille1,dc=fr
objectClass: inetOrgPerson (classe d'objet par défaut qui caractérise une personne)
objectClass: inetOrgPerson (classe d'objet par d&#233;faut qui caract&#233;rise une personne)
   objectClass: supannPerson(recommandations SUPANN)
   objectClass: supannPerson(recommandations SUPANN)
     objectClass: posixAccount (authentification type Unix)
     objectClass: posixAccount (authentification type Unix)
       objectClass: sambaAccount (ouverture de session Windows)
       objectClass: sambaAccount (ouverture de session Windows)
         objectClass: ustlPerson (interne à l'établissement)
         objectClass: ustlPerson (interne &#224; l'&#233;tablissement)
           objectClass: radiusProfile (authentification WiFi)
           objectClass: radiusProfile (authentification WiFi)
cn: Declercq Patricksn: Declercq
cn: Declercq Patricksn: Declercq
Ligne 62 : Ligne 49 :
telephoneNumber: + 33 3 20 43 44 26
telephoneNumber: + 33 3 20 43 44 26
supannCivilite: M.
supannCivilite: M.
supannAffectation: CRI Centre de Ressources Informatiques
supannAffectation: CRI &#8211; Centre de Ressources Informatiques
supannListeRouge: FALSE
supannListeRouge: FALSE
   uidNumber: 6304
   uidNumber: 6304
Ligne 71 : Ligne 58 :
       ustlRole: Correspondant annuaire de l'USTL
       ustlRole: Correspondant annuaire de l'USTL
         radiusGroupName: personnel</pre>
         radiusGroupName: personnel</pre>
 
<p>Les alimentations et les màj peuvent se faire par une base (de scolarité pour les étudiants...), cela permet un changement de mdp interactif, etc. Les personnels passent par Harpège, et par le bouton "mise à jour" de la page annuaire de l'université.<br /> Données nominatives&#160;:
Les alimentations et les màj peuvent se faire par une base (de scolarité pour les étudiants...), cela permet un changement de mdp interactif, etc. Les personnels passent par Harpège, et par le bouton "mise à jour" de la page annuaire de l'université.<br/> Données nominatives&nbsp;:
</p>
 
<ul><li>publiées avec l’accord de la personne, </li>
*publiées avec l’accord de la personne,  
<li>utilisées dans le cadre d ’un objectif précis, </li>
*utilisées dans le cadre d ’un objectif précis,  
<li>durée de conservation raisonnable, </li>
*durée de conservation raisonnable,  
<li>sécurité physique et logique des données, </li>
*sécurité physique et logique des données,  
<li>accessibles qu’aux seules personnes autorisées. </li>
*accessibles qu’aux seules personnes autorisées.  
<li><a href="http://www.cnil.fr" alt="http://www.cnil.fr" title="http://www.cnil.fr">http://www.cnil.fr</a> </li>
*[http://www.cnil.fr http://www.cnil.fr]
<li><a href="http://www.educnet.education.fr/legamedia" alt="http://www.educnet.education.fr/legamedia" title="http://www.educnet.education.fr/legamedia">http://www.educnet.education.fr/legamedia</a> </li></ul>
*[http://www.educnet.education.fr/legamedia http://www.educnet.education.fr/legamedia]
<h1> Authentification web, SSO, fédération d'identités</h1>
 
<p>Il faut pouvoir gérer le contrôle d'accès aux applications web. Pour cela&#160;:
= Authentification web, SSO, fédération d'identités =
</p>
 
<ul><li>On veut restreindre l'accès à une partie du serveur à une population donnée </li></ul>
Il faut pouvoir gérer le contrôle d'accès aux applications web. Pour cela&nbsp;:
<p>On peut identifier l'utilisateur par son IP (pas suffisant) et en l'authentifiant.
 
</p>
*On veut restreindre l'accès à une partie du serveur à une population donnée
<h3> Apache et les modules d'auth</h3>
 
<p>On peut étendre les fonctionnalités du serveur web Apache en ajoutant des modules&#160;:
On peut identifier l'utilisateur par son IP (pas suffisant) et en l'authentifiant.
</p>
 
<ul><li>mod_auth&#160;: utilisation des fichiers htpasswd et htgroup </li>
=== Apache et les modules d'auth ===
<li>mod_ssl&#160;: gestion SSL et authentification avec certificats </li>
 
<li>mod_authldap&#160;: authentification LDAP </li>
On peut étendre les fonctionnalités du serveur web Apache en ajoutant des modules&nbsp;:
<li>mod_authZldap&#160;: authentification avec certificats puis autorisation basée sur LDAP </li>
 
<li>etc&#160;: <a href="http://modules.apache.org" alt="http://modules.apache.org" title="http://modules.apache.org">http://modules.apache.org</a> </li></ul>
*mod_auth&nbsp;: utilisation des fichiers htpasswd et htgroup  
<p>Authentification et autorisation sont deux processus disjoints (cf.&#160;: le haut de la page)
*mod_ssl&nbsp;: gestion SSL et authentification avec certificats  
</p>
*mod_authldap&nbsp;: authentification LDAP  
<h3> Les briques d'un SSO</h3>
*mod_authZldap&nbsp;: authentification avec certificats puis autorisation basée sur LDAP  
<ul><li>Le serveur d'authentification&#160;: c'est un élément central. Il authentifie l'utilisateur, assure la persistance de la connexion, propage l'identité vers les applications et se répose sur un ou des référentiels (LDAP, NIS...). </li>
*etc&nbsp;: [http://modules.apache.org http://modules.apache.org]
<li>Les agents d'authentification&#160;: ils sont devant chaque ressource à protéger. Il servent d'interface entre le serveur et l'application&#160;: redirigent l'utilisateur vers le serveur d'authentification et transmettent sont identité vers l'application. Il peuvent être implémentés sous la forme de librairies clients ou de modules intégrés au serveur web. </li></ul>
 
<h3> Techniques utilisées</h3>
Authentification et autorisation sont deux processus disjoints (cf.&nbsp;: le haut de la page)
<ul><li>Pour la communication vers l'utilisateur distant&#160;:  
 
<ul><li>Requêtes GET ou formulaires POST </li>
=== Les briques d'un SSO ===
<li>Redirections </li>
 
<li>JS  </li></ul></li>
*Le serveur d'authentification&nbsp;: c'est un élément central. Il authentifie l'utilisateur, assure la persistance de la connexion, propage l'identité vers les applications et se répose sur un ou des référentiels (LDAP, NIS...).  
<li>Persistence des sessions:  
*Les agents d'authentification&nbsp;: ils sont devant chaque ressource à protéger. Il servent d'interface entre le serveur et l'application&nbsp;: redirigent l'utilisateur vers le serveur d'authentification et transmettent sont identité vers l'application. Il peuvent être implémentés sous la forme de librairies clients ou de modules intégrés au serveur web.  
<ul><li>Cookies&#160;!  </li></ul></li>
 
<li>Protection des échanges:  
=== Techniques utilisées ===
<ul><li>SSL </li>
 
<li>Portée et durée de validité des cookies </li>
*Pour la communication vers l'utilisateur distant&nbsp;:  
<li>Jetons non rejouables  </li></ul></li></ul>
**Requêtes GET ou formulaires POST  
<p>La gestion des sessions se fait à deux niveaux&#160;:
**Redirections  
</p>
**JS   
<ul><li>Avec le serveur d'authentification, ce qui évite de se réauthentifier à chaque fois </li>
*Persistence des sessions:  
<li>Avec l'agent, ce qui évite de renvoyer l'utilisateur vers le serveur à chaque requête. </li></ul>
**Cookies&nbsp;!   
<h3> Aports du SSO</h3>
*Protection des échanges:  
<p>On y gagne en ergonomie&#160;: On ne saisit le mdp qu'une seule fois, à un seul endroit. Il faut donc sensibiliser l'utilisateur.
**SSL  
</p><p>On y gagne en sécurité&#160;: On limite l'accès et la circulation des mots de passe, et cela permet aussi la création d'une politique des mots de passe. Enfin, on peut étendre les mode d'authentification.
**Portée et durée de validité des cookies  
</p><p>Pour les applications, on utilise les mêmes librairies d'authentification dans toutes les applications, ce qui permet de mieux les intégrer.
**Jetons non rejouables   
</p><p>On a le choix, en matière de SSO&#160;: Pas de standardisation, et les besoins deviennent vite pressants. On a une multiplication des solutions, de tous types, plus ou moins sûres...
 
</p>
La gestion des sessions se fait à deux niveaux&nbsp;:
<h3> Single logout</h3>
 
<p>Un utilisateur logué globalement doit pouvoir se déloguer globalement, ce qui est plus difficile que SSO à cause de la multiplication des sessions. Il faut donc gérer une base centrales des applications qui ont une session en cours. C'est une technique complexe et peu implémentée.
*Avec le serveur d'authentification, ce qui évite de se réauthentifier à chaque fois  
</p>
*Avec l'agent, ce qui évite de renvoyer l'utilisateur vers le serveur à chaque requête.  
<h3> Ensuite...</h3>
 
<p>On constate donc que les limites d'un service d'authentification apparaissent lorsque l'on veut ouvrir les portes à quelqu'un de l'éxtérieur. Comment reconnaître localement l'identité de quelqu'un qui vient de dehors?
=== Aports du SSO ===
</p>
 
<h2> Fédérations d'identités</h2>
On y gagne en ergonomie&nbsp;: On ne saisit le mdp qu'une seule fois, à un seul endroit. Il faut donc sensibiliser l'utilisateur.
<h3> SAML</h3>
 
<ul><li>SAML=Security Assertion Markup Language </li>
On y gagne en sécurité&nbsp;: On limite l'accès et la circulation des mots de passe, et cela permet aussi la création d'une politique des mots de passe. Enfin, on peut étendre les mode d'authentification.
<li>Standard OASIS en 2002•Répond à un besoin d’interopérabilité </li>
 
<li>Echanges d’assertions de sécurité entre services </li>
Pour les applications, on utilise les mêmes librairies d'authentification dans toutes les applications, ce qui permet de mieux les intégrer.
<li>Indépendant des mécanismes d’authentification </li></ul>
 
<p>Types d'assertions SAML&#160;:
On a le choix, en matière de SSO&nbsp;: Pas de standardisation, et les besoins deviennent vite pressants. On a une multiplication des solutions, de tous types, plus ou moins sûres...
</p>
 
<ul><li>Authentification </li>
=== Single logout ===
<li>Échange d’attributs </li>
 
<li>Décisions d’autorisation </li></ul>
Un utilisateur logué globalement doit pouvoir se déloguer globalement, ce qui est plus difficile que SSO à cause de la multiplication des sessions. Il faut donc gérer une base centrales des applications qui ont une session en cours. C'est une technique complexe et peu implémentée.
<h3> Liberty Alliance</h3>
 
<ul><li>Consortium d’industriels produisant des spécifications sur la gestion d’identités </li>
=== Ensuite... ===
<li>S’appuie sur SAML </li>
 
<li>Implémenté dans de nombreux produits </li></ul>
On constate donc que les limites d'un service d'authentification apparaissent lorsque l'on veut ouvrir les portes à quelqu'un de l'éxtérieur. Comment reconnaître localement l'identité de quelqu'un qui vient de dehors?
<h3> Shibboleth</h3>
 
<ul><li>Norme et produit développé par Internet2 </li>
== Fédérations d'identités ==
<li>Open source </li>
 
<li>Première version en 200 </li>
=== SAML ===
<li>•Basé sur SAML (bibliothèque OpenSAML </li>
 
<li>•Utilisé surtout par des universités </li>
*SAML=Security Assertion Markup Language  
<li>Conçu pour interconnecter les SSO des universités </li>
*Standard OASIS en 2002•Répond à un besoin d’interopérabilité  
<li>Fonctionnalités  
*Echanges d’assertions de sécurité entre services  
<ul><li>Délégation d’authentification </li>
*Indépendant des mécanismes d’authentification  
<li>WAYF pour orienter l’utilisateur </li>
 
<li>Propagation des attributs utilisateur </li>
Types d'assertions SAML&nbsp;:
<li>Partage de méta données </li>
 
<li>Définition de règles de confiance  </li></ul></li></ul>
*Authentification  
<h3> WS-Federation</h3>
*Échange d’attributs  
<ul><li>Draft porté par Microsoft et IBM, 2003 </li>
*Décisions d’autorisation  
<li>Basée sur les spécifications WS-*  
 
<ul><li>–WS-Security, WS-Trust, WS-Policy, WS-MetadataExchange  </li></ul></li>
=== Liberty Alliance ===
<li>Définit l’échange d’identités et d’attributs entre domaines de sécurité </li></ul>
 
<p>ET d'autres...
*Consortium d’industriels produisant des spécifications sur la gestion d’identités  
</p><p>OpenID <a href="http://openid.net/" alt="http://openid.net/" title="http://openid.net/">http://openid.net/</a>
*S’appuie sur SAML  
</p>
*Implémenté dans de nombreux produits  
<ul><li>Protocole de délégation d'authentification </li>
 
<li>Origine&#160;: authentification sur les blogs </li>
=== Shibboleth ===
<li>Principe&#160;:
 
<ul><li>1.Saisie de l’URI de son OpenID provider </li>
*Norme et produit développé par Internet2  
<li>2.Redirection vers l’OpenID provider </li>
*Open source  
<li>3.Authentification  </li></ul></li>
*Première version en 200  
<li>Développement rapide de la technologie </li>
*•Basé sur SAML (bibliothèque OpenSAML  
<li>Nombreux services compatibles </li>
*•Utilisé surtout par des universités  
<li>Nombreuses implémentations </li></ul>
*Conçu pour interconnecter les SSO des universités  
<p>Oauth <a href="http://oauth.net" alt="http://oauth.net" title="http://oauth.net">http://oauth.net</a>
*Fonctionnalités  
</p>
**Délégation d’authentification  
<ul><li>Standard récent (version 1.0, décembre 2007) </li>
**WAYF pour orienter l’utilisateur  
<li>Définit un standard permettant la délégation d'un utilisateur pour l'accès à un service </li>
**Propagation des attributs utilisateur  
<li>Exemple d'utilisation
**Partage de méta données  
<ul><li>–Un utilisateur autorise un service d'impression à accéder à ses photos sur un site de gestion de photos  </li></ul></li>
**Définition de règles de confiance   
<li>Oauth est complémentaire de OpenID </li></ul>
 
<h2> Apports de la fédération d'identités</h2>
=== WS-Federation ===
<p>Pour l’utilisateur&#160;:
 
</p>
*Draft porté par Microsoft et IBM, 2003  
<ul><li>–Il n’utilise que le mot de passe de son SSO </li>
*Basée sur les spécifications WS-*  
<li>–Adapté aux utilisateurs nomades </li></ul>
**–WS-Security, WS-Trust, WS-Policy, WS-MetadataExchange   
<p>Pour l’établissement de rattachement
*Définit l’échange d’identités et d’attributs entre domaines de sécurité  
</p>
 
<ul><li>–Niveau de sécurité constant (SSO) </li>
ET d'autres...
<li>–Meilleure maîtrise des données personnelle </li></ul>
 
<p>Pour les gestionnaires de ressources
OpenID [http://openid.net/ http://openid.net/]
</p>
 
<ul><li>–Plus besoin de gérer des comptes utilisateurs </li>
*Protocole de délégation d'authentification
<li>–Accès à des données utilisateurs fiables </li></ul>
*Origine&nbsp;: authentification sur les blogs
<h1> Dans la pratique</h1>
*Principe&nbsp;:  
<h2> LemonLDAP-ng</h2>
**1.Saisie de l’URI de son OpenID provider
<p><a href="https://lemonldap-ng.org/documentation/latest/start" alt="https://lemonldap-ng.org/documentation/latest/start" title="https://lemonldap-ng.org/documentation/latest/start">https://lemonldap-ng.org/documentation/latest/start</a>
**2.Redirection vers l’OpenID provider
</p><p>LemonLDAP::NG est un logiciel open source, créé en 2004 par la Gendarmerie nationale française, en fourchant le logiciel LemonLDAP. Il fournit une solution d'authentification unique distribuée avec gestion centralisée des droits sous licence GPL. (Wikipédia).
**3.Authentification 
</p><p>Je pars comme toujours d'une Debian 9.
*Développement rapide de la technologie
</p><p>Dans l'installation suivante, il fournit deux sites web importants&#160;:
*Nombreux services compatibles
</p>
*Nombreuses implémentations
<ul><li>auth.ju.lab&#160;: pour que les utilisateurs s'authentifient </li>
 
<li>manager.ju.lab&#160;: interface de gestion, à protéger&#160;! </li></ul>
Oauth [http://oauth.net http://oauth.net]
<h3> Installation et configuration</h3>
 
<p>On commence par installer depuis les repos lemonldap (ert surtout pas les repos debian...)&#160;:
*Standard récent (version 1.0, décembre 2007)
</p>
*Définit un standard permettant la délégation d'un utilisateur pour l'accès à un service
<pre class="code">vi /etc/apt/sources.list.d/lemonldap-ng.list
*Exemple d'utilisation
#Ajouter&#160;:
**–Un utilisateur autorise un service d'impression à accéder à ses photos sur un site de gestion de photos 
# LemonLDAP::NG repository
*Oauth est complémentaire de OpenID
deb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; https://lemonldap-ng.org/deb 1.9 main
 
deb-src https://lemonldap-ng.org/deb 1.9 main
== Apports de la fédération d'identités ==
#Puis
 
apt install apt-transport-https
Pour l’utilisateur&nbsp;:
wget -O - https://lemonldap-ng.org/_media/rpm-gpg-key-ow2 | apt-key add -
 
apt update
*–Il n’utilise que le mot de passe de son SSO
apt install apache2 libapache2-mod-perl libapache2-mod-fcgid
*–Adapté aux utilisateurs nomades
apt install lemonldap-ng
 
</pre>
Pour l’établissement de rattachement
<p>Puis je change le example.org en y mettant mon domaine à la place (penser au DNS ou au fichier hosts par la suite&#160;!)
 
</p>
*–Niveau de sécurité constant (SSO)
<pre>sed -i 's/example\.com/ju.lab/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1.js</pre>
*–Meilleure maîtrise des données personnelle
<p>On modifie le fichier hosts de notre serveur:
 
</p>
Pour les gestionnaires de ressources
<pre>cat /etc/lemonldap-ng/for_etc_hosts &gt;&gt; /etc/hosts
 
echo &quot;127.0.0.1 reload.ju.lab&quot; &gt;&gt; /etc/hosts
*–Plus besoin de gérer des comptes utilisateurs
</pre>
*–Accès à des données utilisateurs fiables
<p>Suite à l'installation via apt, il n'est en théorie pas nécessaire d'intégrer LemonLDAP à Apache. Il y'a juste à activer les sites et les mods&#160;:
 
</p>
&nbsp;
<pre>a2ensite portal-apache2.conf
 
a2ensite manager-apache2.conf
&nbsp;
a2ensite handler-apache2.conf
a2enmod fcgid perl alias rewrite headers
systemctl restart apache2</pre>
<p>Désormais, je peux accéder à auth.ju.lab et à manager.ju.lab.
</p><p>Le compte de démo par défaut est&#160;: dwho - dwho
</p><p>&#160;
</p><p>&#160;
</p><p>&#160;
</p><p>&#160;
</p><p>&#160;
</p></div>

Version du 31 mars 2019 à 15:47

Single Sign-On

Liens

Panorama de solutions : <a href="http://www.open-source-guide.com/Solutions/Developpement-et-couches-intermediaires/Authentification-federation-et-de-gestion-d-identite" alt="http://www.open-source-guide.com/Solutions/Developpement-et-couches-intermediaires/Authentification-federation-et-de-gestion-d-identite" title="http://www.open-source-guide.com/Solutions/Developpement-et-couches-intermediaires/Authentification-federation-et-de-gestion-d-identite">http://www.open-source-guide.com/Solutions/Developpement-et-couches-intermediaires/Authentification-federation-et-de-gestion-d-identite</a>

Présentation

Le SSO consiste à centraliser les authentifications; on uniformise la sécurité de l'authentification, quelle que soit la plateforme. On peut ensuite appliquer une politique de mdp et gérer l'authentification via des protocoles normalisés et sécurisés (LDAP, Kerberos, CAS, RADIUS, etc). Le SSO est un début pour passer ensuite à l'authentification multi-facteurs. Les buts sont :

  • Amélioration de la sécurité
  • Simplifier l'utilisation
  • Faciliter les opérations pour les gestionnaires

AAA :

  • Authentification : Prouver son identité
  • Authorization : Qu'est-ce que j'ai le droit de faire
  • Accounting : Qu'est-ce que je fais

On a aussi une notion de single logout : je me peut me loguer et me déloguer de manière globale, ce qui est moins évident, parce que chaque application gère son authentification de façon globale. Il faut donc gérer une base centrale des applications qui ont une session d’authentification avec l’utilisateur et mémoriser une URL de déconnexion.–Le single logoutest complexe donc peu implémenté...

Technos utilisées

  • HTTP header : Pour les application proxifiées. On protège les apps, contrôle les urls, et on crée des variables multiples... (???) On a pas besoin de SLO.
    • <img src="/mediawiki/images/3/34/Http_header.png" _fck_mw_filename="Http header.png" _fck_mw_origimgwidth="781" _fck_mw_origimgheight="351" alt="RTENOTITLE" title="RTENOTITLE" style="vertical-align:middle;" />
  • SAML (Security Assertion Markup Language) :standard informatique définissant un protocole pour échanger des informations liées à la sécurité. Basé sur le langage XML, SAML a été développé par OASIS. SAML propose l'authentification unique (en anglais single sign-on ou SSO) sur le web. De cette manière, un utilisateur peut naviguer sur plusieurs sites différents en ne s'authentifiant qu'une seule fois, sans pour autant que ces sites aient accès à des informations trop confidentielles. (wikipédia)
  • Authentification formulaire : Elle est utilisée par les applications sans SSO possible, ne permet pas de SLO, et lente et non recommandée. De plus, on doit stocker les mdp utilisateurs...
  • Il reste aussi CAS, OpenID, WS-federation...

LDAP

cf : <a href="Protocoles">Protocoles</a>

Un annuraire LDAP contient de nombreuses informations relatives aux personnes : compte, mdp, etc; mais aussi aux structures. Il sert au contrôle d'accès (en donnant différents droits sur différents services). Un tas de services s'appuient sur LDAP, chez Windows comme chez Unix.

Recommandations

Recommandations nationales SUPANN (juin 2003), pour que les annuaires de la communauté 'Education Recherche' partagent un modèle identique:

  • assurer l'interopérabilité des différents annuaires (ENT),
  • faciliter la mise en place d'un méta-annuaire national

LDAP a une structure arborescente :

<img src="/mediawiki/images/4/4e/Ldap_struc.png" _fck_mw_filename="Ldap struc.png" _fck_mw_origimgwidth="960" _fck_mw_origimgheight="482" alt="RTENOTITLE" title="RTENOTITLE" style="vertical-align:middle;" />

Exemple d'une entrée 'personnel' :

dn: uid=declercq,ou=people,dc=univ-lille1,dc=fr
objectClass: inetOrgPerson (classe d'objet par défaut qui caractérise une personne)
  objectClass: supannPerson(recommandations SUPANN)
    objectClass: posixAccount (authentification type Unix)
      objectClass: sambaAccount (ouverture de session Windows)
        objectClass: ustlPerson (interne à l'établissement)
          objectClass: radiusProfile (authentification WiFi)
cn: Declercq Patricksn: Declercq
givenName: Patrick
uid: declercquser
Password:: {CRYPT}ZZZZZZZZZZZZZ
mail: Patrick.Declercq@univ-lille1.fr
telephoneNumber: + 33 3 20 43 44 26
supannCivilite: M.
supannAffectation: CRI – Centre de Ressources Informatiques
supannListeRouge: FALSE
  uidNumber: 6304
  gidNumber: 5000
    lmPassword: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    ntPassword: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
      ustlDepartement: CRI
      ustlRole: Correspondant annuaire de l'USTL
        radiusGroupName: personnel

Les alimentations et les màj peuvent se faire par une base (de scolarité pour les étudiants...), cela permet un changement de mdp interactif, etc. Les personnels passent par Harpège, et par le bouton "mise à jour" de la page annuaire de l'université.
Données nominatives :

Authentification web, SSO, fédération d'identités

Il faut pouvoir gérer le contrôle d'accès aux applications web. Pour cela :

  • On veut restreindre l'accès à une partie du serveur à une population donnée

On peut identifier l'utilisateur par son IP (pas suffisant) et en l'authentifiant.

Apache et les modules d'auth

On peut étendre les fonctionnalités du serveur web Apache en ajoutant des modules :

Authentification et autorisation sont deux processus disjoints (cf. : le haut de la page)

Les briques d'un SSO

  • Le serveur d'authentification : c'est un élément central. Il authentifie l'utilisateur, assure la persistance de la connexion, propage l'identité vers les applications et se répose sur un ou des référentiels (LDAP, NIS...).
  • Les agents d'authentification : ils sont devant chaque ressource à protéger. Il servent d'interface entre le serveur et l'application : redirigent l'utilisateur vers le serveur d'authentification et transmettent sont identité vers l'application. Il peuvent être implémentés sous la forme de librairies clients ou de modules intégrés au serveur web.

Techniques utilisées

  • Pour la communication vers l'utilisateur distant :
    • Requêtes GET ou formulaires POST
    • Redirections
    • JS
  • Persistence des sessions:
    • Cookies !
  • Protection des échanges:
    • SSL
    • Portée et durée de validité des cookies
    • Jetons non rejouables

La gestion des sessions se fait à deux niveaux :

  • Avec le serveur d'authentification, ce qui évite de se réauthentifier à chaque fois
  • Avec l'agent, ce qui évite de renvoyer l'utilisateur vers le serveur à chaque requête.

Aports du SSO

On y gagne en ergonomie : On ne saisit le mdp qu'une seule fois, à un seul endroit. Il faut donc sensibiliser l'utilisateur.

On y gagne en sécurité : On limite l'accès et la circulation des mots de passe, et cela permet aussi la création d'une politique des mots de passe. Enfin, on peut étendre les mode d'authentification.

Pour les applications, on utilise les mêmes librairies d'authentification dans toutes les applications, ce qui permet de mieux les intégrer.

On a le choix, en matière de SSO : Pas de standardisation, et les besoins deviennent vite pressants. On a une multiplication des solutions, de tous types, plus ou moins sûres...

Single logout

Un utilisateur logué globalement doit pouvoir se déloguer globalement, ce qui est plus difficile que SSO à cause de la multiplication des sessions. Il faut donc gérer une base centrales des applications qui ont une session en cours. C'est une technique complexe et peu implémentée.

Ensuite...

On constate donc que les limites d'un service d'authentification apparaissent lorsque l'on veut ouvrir les portes à quelqu'un de l'éxtérieur. Comment reconnaître localement l'identité de quelqu'un qui vient de dehors?

Fédérations d'identités

SAML

  • SAML=Security Assertion Markup Language
  • Standard OASIS en 2002•Répond à un besoin d’interopérabilité
  • Echanges d’assertions de sécurité entre services
  • Indépendant des mécanismes d’authentification

Types d'assertions SAML :

  • Authentification
  • Échange d’attributs
  • Décisions d’autorisation

Liberty Alliance

  • Consortium d’industriels produisant des spécifications sur la gestion d’identités
  • S’appuie sur SAML
  • Implémenté dans de nombreux produits

Shibboleth

  • Norme et produit développé par Internet2
  • Open source
  • Première version en 200
  • •Basé sur SAML (bibliothèque OpenSAML
  • •Utilisé surtout par des universités
  • Conçu pour interconnecter les SSO des universités
  • Fonctionnalités
    • Délégation d’authentification
    • WAYF pour orienter l’utilisateur
    • Propagation des attributs utilisateur
    • Partage de méta données
    • Définition de règles de confiance

WS-Federation

  • Draft porté par Microsoft et IBM, 2003
  • Basée sur les spécifications WS-*
    • –WS-Security, WS-Trust, WS-Policy, WS-MetadataExchange
  • Définit l’échange d’identités et d’attributs entre domaines de sécurité

ET d'autres...

OpenID <a href="http://openid.net/" alt="http://openid.net/" title="http://openid.net/">http://openid.net/</a>

  • Protocole de délégation d'authentification
  • Origine : authentification sur les blogs
  • Principe :
    • 1.Saisie de l’URI de son OpenID provider
    • 2.Redirection vers l’OpenID provider
    • 3.Authentification
  • Développement rapide de la technologie
  • Nombreux services compatibles
  • Nombreuses implémentations

Oauth <a href="http://oauth.net" alt="http://oauth.net" title="http://oauth.net">http://oauth.net</a>

  • Standard récent (version 1.0, décembre 2007)
  • Définit un standard permettant la délégation d'un utilisateur pour l'accès à un service
  • Exemple d'utilisation
    • –Un utilisateur autorise un service d'impression à accéder à ses photos sur un site de gestion de photos
  • Oauth est complémentaire de OpenID

Apports de la fédération d'identités

Pour l’utilisateur :

  • –Il n’utilise que le mot de passe de son SSO
  • –Adapté aux utilisateurs nomades

Pour l’établissement de rattachement

  • –Niveau de sécurité constant (SSO)
  • –Meilleure maîtrise des données personnelle

Pour les gestionnaires de ressources

  • –Plus besoin de gérer des comptes utilisateurs
  • –Accès à des données utilisateurs fiables

Dans la pratique

LemonLDAP-ng

<a href="https://lemonldap-ng.org/documentation/latest/start" alt="https://lemonldap-ng.org/documentation/latest/start" title="https://lemonldap-ng.org/documentation/latest/start">https://lemonldap-ng.org/documentation/latest/start</a>

LemonLDAP::NG est un logiciel open source, créé en 2004 par la Gendarmerie nationale française, en fourchant le logiciel LemonLDAP. Il fournit une solution d'authentification unique distribuée avec gestion centralisée des droits sous licence GPL. (Wikipédia).

Je pars comme toujours d'une Debian 9.

Dans l'installation suivante, il fournit deux sites web importants :

  • auth.ju.lab : pour que les utilisateurs s'authentifient
  • manager.ju.lab : interface de gestion, à protéger !

Installation et configuration

On commence par installer depuis les repos lemonldap (ert surtout pas les repos debian...) :

vi /etc/apt/sources.list.d/lemonldap-ng.list
#Ajouter : 
# LemonLDAP::NG repository
deb&nbsp;&nbsp;&nbsp;&nbsp; https://lemonldap-ng.org/deb 1.9 main
deb-src https://lemonldap-ng.org/deb 1.9 main
#Puis
apt install apt-transport-https
wget -O - https://lemonldap-ng.org/_media/rpm-gpg-key-ow2 | apt-key add -
apt update
apt install apache2 libapache2-mod-perl libapache2-mod-fcgid
apt install lemonldap-ng 

Puis je change le example.org en y mettant mon domaine à la place (penser au DNS ou au fichier hosts par la suite !)

sed -i 's/example\.com/ju.lab/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1.js

On modifie le fichier hosts de notre serveur:

cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts
echo "127.0.0.1 reload.ju.lab" >> /etc/hosts

Suite à l'installation via apt, il n'est en théorie pas nécessaire d'intégrer LemonLDAP à Apache. Il y'a juste à activer les sites et les mods :

a2ensite portal-apache2.conf
a2ensite manager-apache2.conf
a2ensite handler-apache2.conf
a2enmod fcgid perl alias rewrite headers
systemctl restart apache2

Désormais, je peux accéder à auth.ju.lab et à manager.ju.lab.

Le compte de démo par défaut est : dwho - dwho