Rencontres Mondiales
    Du Logiciel Libre
CAS, OpenID, SAML : concepts,
  différences et exemples

        Clément OUDOT

          13 juillet 2011
Sommaire
●   WebSSO, contrôle d'accès et fédération
    d'identité
●   Les protocoles
    ●   CAS
    ●   OpenID
    ●   SAML
●   Que choisir ?



                                                      12/07/11
2                                       http://lemonldap-ng.org
Présentations




                       12/07/11
3        http://lemonldap-ng.org
Clément OUDOT
●   Contributeur LemonLDAP::NG depuis 2007,
    Leader depuis 2011, en relais de Xavier
    GUIMARD
●   Leader du projet LDAP Tool Box
●   Actif dans les communautés OpenLDAP et
    LDAP Synchronization Connector
●   Membre de la cellule Identité / Sécurité du
    Groupe LINAGORA depuis 2003


                                                         12/07/11
4                                          http://lemonldap-ng.org
Quelques mots sur LemonLDAP::NG
●   Logiciel libre de WebSSO, contrôle d'accès et
    fédération d'identité
●   Compatibilité CAS, OpenID et SAML 2.0
●   Écrit en Perl, exécuté dans mod_perl d'Apache
●   Version 1.1.0 sortie le 8 juillet 2011




                                                           12/07/11
5                                            http://lemonldap-ng.org
WebSSO, contrôle d'accès et fédération
                                 d'identité




                                                 12/07/11
6                                  http://lemonldap-ng.org
WebSSO
●   SSO signifie « Single Sign On », qui peut se traduire
    en français par « authentification unique »

●   Le WebSSO se consacre à l'authentification unique
    pour les applications Web, c'est-à-dire des applications
    client-serveur dont le client est un navigateur Web (IE,
    Firefox, etc.)

●   Le principe de base est d'intercepter les requêtes entre
    le client et le serveur, et indiquer au serveur que le
    client est bien authentifié

                                                               12/07/11
7                                                http://lemonldap-ng.org
Intérêt du WebSSO : éviter la
       multiplication des identités




                                        12/07/11
8                         http://lemonldap-ng.org
Cinématique simple

                      1
Utilisateur

                  3
              2




                                 Application Web

 Portail WebSSO
Contrôle d'accès
●   Une fois l'utilisateur authentifié, il faut récupérer ses
    habilitations :
    ●   Des rôles
    ●   Des groupes
    ●   Des attributs divers (âge, nationalité, etc.)
●   Les habilitations donnent accès à des ressources ou
    des fonctions
●   Plusieurs modèles existent, le principal étant RBAC
    (Role Based Access Control)
●   Le protocole XACML permet de déléguer les demandes
    d'habilitations à des points de décision (PDP)
Fédération d'identités
●   Notions de cercle de confiance, fournisseur
    d'identités (IDP) et fournisseur de service (SP)
●   L'utilisateur qui possède plusieurs identités
    numériques peut les fédérer au sein d'un cercle
    de confiance
●   Le résultat visible est l'accès transparent aux
    fournisseurs de service, mais d'autres
    avantages existent, comme la déconnexion
    unique (SLO)
Intérêt de la fédération d'identités :
                                        protection de la vie privée
                          Fournisseur de service            Fournisseur d'attribut




                            Fournisseur d'identité
                                                         Fournisseur de service




Interaction utilisateur


    Appel distant
Protocoles




                     12/07/11
13     http://lemonldap-ng.org
CAS
●   Central Authentication Service
●   Documentation du protocole pour 1.0 et 2.0
●   Utilisation de tickets de service dans l'URL,
    avec validation par un lien dorsal
●   Possibilité de tickets proxy
●   Pas de partage d'attributs
Cinématique CAS

                1. Premier accès à l'application

                                                               Application « CASsifiée »

                 3. Transmission du ticket




                                             4. Validation du ticket
2. Authentification sur CAS                  et récupération de l'identifiant
et récupération d'un ticket




                        Serveur CAS
CAS
●   Requête ticket de service CAS :
https://auth.example.com/cas/login?
service=http://auth.example.com/cas.pl  

●   Réponse ticket de service CAS :
http://auth.example.com/cas.pl?ticket=ST­
6096f5d3ddb33df6fd79529e2d626a6d
CAS
●   Requête validation ticket CAS :
https://auth.example.com/cas/serviceValidate?
service=http://auth.example.com/cas.pl&ticket=ST­
6096f5d3ddb33df6fd79529e2d626a6d

●   Réponse validation ticket CAS version 1 :
yes
coudot
●   Réponse validation ticket CAS version 2 :
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> 
  <cas:authenticationSuccess> 
    <cas:user>coudot</cas:user> 
  </cas:authenticationSuccess> 
</cas:serviceResponse> 
OpenID
●   L'identifiant de l'utilisateur contient l'adresse du
    service d'authentification
●   Aussi basé sur les redirections HTTP
●   Permet le partage d'attributs (mais plusieurs
    normes possibles...)
●   Pas de notion de cercle de confiance
Cinématique OpenID

                   1. Premier accès à l'application

                                                                Site Web

                    4. Réponse OpenID



                                              2. Récupération d'informations OpenID
3. Authentification sur le serveur
OpenID choisi par l'utilisateur                5. Validation de la réponse (facultatif)




   Serveur OpenID           Serveur OpenID        Serveur OpenID
Requête OpenID
https://auth.vm2.lemonsaml.linagora.com/openidserver/?
openid.ns=http://specs.openid.net/auth/2.0&openid.return_t
o=http://auth.vm1.lemonsaml.linagora.com/%3Fopenid
%3D1%26lmAuth%3D2OpenID%26oic.time%3D1304351669­
dab6b201beda30620859&openid.claimed_id=http://auth.vm2.lem
onsaml.linagora.com/openidserver/coudot&openid.identity=ht
tp://auth.vm2.lemonsaml.linagora.com/openidserver/coudot&o
penid.mode=checkid_setup&openid.realm=http://auth.vm1.lemo
nsaml.linagora.com/&openid.assoc_handle=1304351670:2TKNyP6
79ZL6J1S9i0TH:3e0d127809&openid.sreg.optional=nickname,ful
lname,email 
Réponse OpenID
http://auth.vm1.lemonsaml.linagora.com/?
openid=1&lmAuth=2OpenID&oic.time=1304351669­
dab6b201beda30620859&openid.mode=id_res&openid.claimed_id=
http://auth.vm2.lemonsaml.linagora.com/openidserver/coudot
&openid.identity=http://auth.vm2.lemonsaml.linagora.com/op
enidserver/coudot&openid.op_endpoint=https://auth.vm2.lemo
nsaml.linagora.com/openidserver/&openid.return_to=http://a
uth.vm1.lemonsaml.linagora.com/%3Fopenid%3D1%26lmAuth
%3D2OpenID%26oic.time%3D1304351669­
dab6b201beda30620859&openid.response_nonce=2011­05­
02T15:56:03ZW3EeYE&openid.assoc_handle=1304351670:2TKNyP67
9ZL6J1S9i0TH:3e0d127809&openid.ns=http://specs.openid.net/
auth/2.0&openid.signed=mode,claimed_id,identity,op_endpoin
t,return_to,response_nonce,assoc_handle&openid.sig=tOO9kHJ
gQKajdnb6qTLMCSREdO0%3D 
SAML
●   Security Assertion Markup Language
●   XML, XML Security
●   Cercle de confiance : enregistrement préalable
    des fournisseurs de services et des
    fournisseurs d'identités
●   Plusieurs méthodes : GET / POST / Artefact
    GET / Artefact POST
●   Gestion de conditions, contextes
    d'authentification, ...
SAML, gloire et beauté

                WS-*




           ID-WSF 1.2         ID-WSF 2.0


            ID-FF 1.2


SAML 1.0                        SAML 2.0



           Shibboleth 1
Cinématique SAML 2.0

           1. Premier accès à l'application

                                                     SP SAML

           3. Réponse SAML


             2. Authentification sur le serveur
             SAML choisi par l'utilisateur et
             autorisé dans le cercle de
             confiance




IDP SAML           IDP SAML               IDP SAML
Requête SAML
<samlp:AuthnRequest 
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
    ID="_d7607d551380ac97853a6ff4907c4ef01219be97dd" Version="2.0"
    IssueInstant="2008­05­27T07:46:06Z" ForceAuthn="true" 
IsPassive="false"  
Destination="https://openidp.feide.no/simplesaml/saml2/idp/SSOServ
ice.php"
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP­
POST"    
AssertionConsumerServiceURL="http://dev.andreas.feide.no/simplesam
l/saml2/sp/AssertionConsumerService.php">   
<saml:Issuer>http://dev.andreas.feide.no/simplesaml/saml2/sp/metad
ata.php</saml:Issuer>
    <samlp:NameIDPolicy 
Format="urn:oasis:names:tc:SAML:2.0:nameid­format:transient"
        AllowCreate="true"/>
</samlp:AuthnRequest>
<?xml version="1.0"?>
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
                                                                                                                                              Réponse SAML
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  ID="_162f441d28cff78e3bb1d3c2bf3e48b5ed532605fd"
  InResponseTo="_ae0216740b5baa4b13c79ffdb2baa82572788fd9a3" Version="2.0"
  IssueInstant="2008-05-27T07:49:23Z"
  Destination="https://foodle.feide.no/simplesaml/saml2/sp/AssertionConsumerService.php">
  <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://openidp.feide.no</saml:Issuer>
  <samlp:Status xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
     <samlp:StatusCode xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"

        Value="urn:oasis:names:tc:SAML:2.0:status:Success                    "/>
  </samlp:Status>
  <saml:Assertion Version="2.0" ID="pfxb27555d8-8c06-a339-c7ae-f544b2fd1507"
     IssueInstant="2008-05-27T07:49:23Z">
     <saml:Issuer>https://openidp.feide.no</saml:Issuer>
     <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>
          <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
          <ds:Reference URI="#pfxb27555d8-8c06-a339-c7ae-f544b2fd1507">
             <ds:Transforms>
               <ds:Transform
                  Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
               <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
             </ds:Transforms>
             <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
             <ds:DigestValue>WUaqPW4nZ8uPyv+sf8qXsaKhHmk=</ds:DigestValue>
          </ds:Reference>
        </ds:SignedInfo>

<ds:SignatureValue>CRq1VvptjNHenZ5aWkyD6GqQX+XLgNiqElJnyLbMUgiwrFZ5J8IEGtC8h2YiwID15ScxVt6tjQc8R3gXkP967PIlemmhYQ4US7V3oPczu4MECamj+07wAg7BCp05UVU3RI3pvi/2dQGRRX4tlXgkzUMzx8+cBeyZaI/BXKjhKEY=</ds:Signature
Value>
        <ds:KeyInfo>
           <ds:X509Data>
<ds:X509Certificate>MIICizCCAfQCCQCY8tKaMc0BMjANBgkqhkiG9w0BAQUFADCBiTELMAkGA1UEBhMCTk8xEjAQBgNVBAgTCVRyb25kaGVpbTEQMA4GA1UEChMHVU5JTkVUVDEOMAwGA1UECxMFRmVpZGUxGTAXBgNVBAMTEG9wZW5pZHAu
ZmVpZGUubm8xKTAnBgkqhkiG9w0BCQEWGmFuZHJlYXMuc29sYmVyZ0B1bmluZXR0Lm5vMB4XDTA4MDUwODA5MjI0OFoXDTM1MDkyMzA5MjI0OFowgYkxCzAJBgNVBAYTAk5PMRIwEAYDVQQIEwlUcm9uZGhlaW0xEDAOBgNVBAoTB1VOSU5FVF
QxDjAMBgNVBAsTBUZlaWRlMRkwFwYDVQQDExBvcGVuaWRwLmZlaWRlLm5vMSkwJwYJKoZIhvcNAQkBFhphbmRyZWFzLnNvbGJlcmdAdW5pbmV0dC5ubzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAt8jLoqI1VTlxAZ2axiDIThWcAOXdu8KkV
UWaN/SooO9O0QQ7KRUjSGKN9JK65AFRDXQkWPAu4HlnO4noYlFSLnYyDxI66LCr71x4lgFJjqLeAvB/GqBqFfIZ3YK/NrhnUqFwZu63nLrZjcUZxNaPjOOSRSDaXpv1kb5k3jOiSGECAwEAATANBgkqhkiG9w0BAQUFAAOBgQBQYj4cAafWaYfjBU2zi1ElwStIa
J5nyp/s/8B8SAPK2T79McMyccP3wSW13LHkmM1jwKe3ACFXBvqGQN0IbcH49hu0FKhYFM/GPDJcIHFBsiyMBXChpye9vBaTNEBCtU3KjjyG0hRT2mAQ9h+bkPmOvlEo/aH0xR68Z9hw4PF13w==</ds:X509Certificate>
           </ds:X509Data>
        </ds:KeyInfo>
     </ds:Signature>
     <saml:Subject>
        <saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
           SPNameQualifier="urn:mace:feide.no:services:no.feide.foodle"
           >_242f88493449e639aab95dd9b92b1d04234ab84fd8</saml:NameID>
        <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
           <saml:SubjectConfirmationData NotOnOrAfter="2008-05-27T07:54:23Z"
              InResponseTo="_ae0216740b5baa4b13c79ffdb2baa82572788fd9a3"
              Recipient="https://foodle.feide.no/simplesaml/saml2/sp/AssertionConsumerService.php"
           />
        </saml:SubjectConfirmation>
     </saml:Subject>
     <saml:Conditions NotBefore="2008-05-27T07:48:53Z" NotOnOrAfter="2008-05-27T07:54:23Z">
        <saml:AudienceRestriction>
           <saml:Audience>urn:mace:feide.no:services:no.feide.foodle</saml:Audience>
        </saml:AudienceRestriction>
     </saml:Conditions>
     <saml:AuthnStatement AuthnInstant="2008-05-27T07:49:23Z"
        SessionIndex="_4f39c931b35a8dd4540b0a6929a361fa134ec8f7b5">
        <saml:AuthnContext>
           <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>
        </saml:AuthnContext>
     </saml:AuthnStatement>

   </saml:Assertion>
</samlp:Response>
Que choisir ?
Différents protocoles pour différents
                                        usages
●   CAS : authentification seulement, applications
    déjà « CASsifiées »

●   OpenID : applications grand public

●   SAML : partage d'identité entre organismes
Des solutions libres dans le langage qui
                                     vous plaît
●   Authentic, Authentic 2 : IDP en Python basé sur
    Lasso (attendez la 3e conférence...)
●   OpenSSO / OpenAM : IDP / SP en Java
    (attendez la 2e conférence...)
●   LemonLDAP::NG : IDP / SP en Perl basé sur
    Lasso pour la gestion de SAML 2.0
●   SimpleSAMLPHP : IDP / SP en PHP
Questions ?




                      12/07/11
30      http://lemonldap-ng.org

CAS, OpenID, Shibboleth, SAML : concepts, différences et exemples