ASFWS 2011 : CAS, OpenID, SAML concepts, différences et exemples

1 760 vues

Publié le

Avec la multiplication des applications Web, la question de l’authentification à ces applications est devenue primordiale. Pour simplifier la vie de l’utilisateur, le concept de SSO (Single Sign On) a été inventé. Dans ce domaine, plusieurs protocoles et standards existent, comme CAS, OpenID, Liberty Alliance, Shibboleth ou SAML.
Quelles sont les différences ? Comment utiliser ces protocoles dans les applications ? Cette conférence tentera de répondre à ces questions en présentant des cas concrets d’implémentation.

Application Security Forum 2011
27.10.2011 - Yverdon-les-Bains (Suisse)
Conférencier: Clément Oudot

Publié dans : Technologie
1 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 760
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
69
Commentaires
1
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

ASFWS 2011 : CAS, OpenID, SAML concepts, différences et exemples

  1. 1. CAS, OpenID, SAML : concepts, différences et exemples <ul>Clément Oudot LDAP / IAM expert LINAGORA </ul>
  2. 2. <ul>Présentation personnelle </ul><ul><li>Ingénieur LDAP, IAM et fédération des identités à LINAGORA depuis 2003
  3. 3. Leader des projets communautaires : </li><ul><li>LemonLDAP::NG ( http://lemonldap-ng.org )
  4. 4. LDAP Tool Box ( http://ltb-project.org ) </li></ul></ul><ul>27.10.2011 </ul><ul></ul><ul>Application Security Forum - Western Switzerland - 2011 </ul>
  5. 5. <ul>Agenda </ul><ul><li>WebSSO, contrôle d'accès et fédération d'identité
  6. 6. Les protocoles </li><ul><li>CAS
  7. 7. OpenID
  8. 8. SAML </li></ul><li>Que choisir ? </li></ul><ul>27.10.2011 </ul><ul>Application Security Forum - Western Switzerland - 2011 </ul><ul></ul>
  9. 9. WebSSO, contrôle d'accès et fédération d'identité
  10. 10. WebSSO <ul><li>SSO signifie « Single Sign On », qui peut se traduire en français par « authentification unique » </li></ul><ul><li>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.) </li></ul><ul><li>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é </li></ul>
  11. 11. Intérêt du WebSSO : éviter la multiplication des identités
  12. 12. Utilisateur Application Web Portail WebSSO Cinématique simple 1 2 3
  13. 13. Contrôle d'accès <ul><li>Une fois l'utilisateur authentifié, il faut récupérer ses habilitations : </li></ul><ul><ul><li>Des rôles
  14. 14. Des groupes
  15. 15. Des attributs divers (âge, nationalité, etc.) </li></ul></ul><ul><li>Les habilitations donnent accès à des ressources ou des fonctions
  16. 16. Plusieurs modèles existent, le principal étant RBAC (Role Based Access Control)
  17. 17. Le protocole XACML permet de déléguer les demandes d'habilitations à des points de décision (PDP) </li></ul>
  18. 18. Fédération d'identités <ul><li>Notions de cercle de confiance, fournisseur d'identités (IDP) et fournisseur de service (SP)
  19. 19. L'utilisateur qui possède plusieurs identités numériques peut les fédérer au sein d'un cercle de confiance
  20. 20. Le résultat visible est l'accès transparent aux fournisseurs de service, mais d'autres avantages existent, comme la déconnexion unique (SLO) </li></ul>
  21. 21. Cercle de confiance Fournisseur de service Fournisseur d'identité Fournisseur de service Fournisseur d'attribut
  22. 22. Protocoles
  23. 23. CAS <ul><li>Central Authentication Service
  24. 24. Documentation du protocole pour 1.0 et 2.0
  25. 25. Utilisation de tickets de service dans l'URL, avec validation par un lien dorsal
  26. 26. Possibilité de tickets proxy
  27. 27. Pas de partage d'attributs </li></ul>
  28. 28. Cinématique CAS 1. Premier accès à l'application Serveur CAS Application « CASsifiée » 2. Authentification sur CAS et récupération d'un ticket 3. Transmission du ticket 4. Validation du ticket et récupération de l'identifiant
  29. 29. CAS <ul><li>Requête ticket de service CAS : </li></ul>https://auth.example.com/cas/login?service=http://auth.example.com/cas.pl <ul><li>Réponse ticket de service CAS : </li></ul>http://auth.example.com/cas.pl?ticket=ST-6096f5d3ddb33df6fd79529e2d626a6d
  30. 30. CAS <ul><li>Requête validation ticket CAS : </li></ul>https://auth.example.com/cas/serviceValidate?service=http://auth.example.com/cas.pl&ticket=ST-6096f5d3ddb33df6fd79529e2d626a6d <ul><li>Réponse validation ticket CAS version 1 : </li></ul>yes coudot <ul><li>Réponse validation ticket CAS version 2 : </li></ul><cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> <cas:authenticationSuccess> <cas:user>coudot</cas:user> </cas:authenticationSuccess> </cas:serviceResponse>
  31. 31. OpenID <ul><li>L'identifiant de l'utilisateur contient l'adresse du service d'authentification
  32. 32. Aussi basé sur les redirections HTTP
  33. 33. Permet le partage d'attributs (mais plusieurs normes possibles...)
  34. 34. Pas de notion de cercle de confiance </li></ul>
  35. 35. Cinématique OpenID 1. Premier accès à l'application Serveur OpenID Site Web 3. Authentification sur le serveur OpenID choisi par l'utilisateur 4. Réponse OpenID 5. Validation de la réponse (facultatif) Serveur OpenID Serveur OpenID 2. Récupération d'informations OpenID
  36. 36. Requête OpenID https://auth.vm2.lemonsaml.linagora.com/openidserver/?openid.ns=http://specs.openid.net/auth/2.0&openid.return_to=http://auth.vm1.lemonsaml.linagora.com/%3Fopenid%3D1%26lmAuth%3D2OpenID%26oic.time%3D1304351669-dab6b201beda30620859&openid.claimed_id=http://auth.vm2.lemonsaml.linagora.com/openidserver/coudot&openid.identity=http://auth.vm2.lemonsaml.linagora.com/openidserver/coudot&openid.mode=checkid_setup&openid.realm=http://auth.vm1.lemonsaml.linagora.com/&openid.assoc_handle=1304351670:2TKNyP679ZL6J1S9i0TH:3e0d127809&openid.sreg.optional=nickname,fullname,email
  37. 37. 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/openidserver/coudot&openid.op_endpoint=https://auth.vm2.lemonsaml.linagora.com/openidserver/&openid.return_to=http://auth.vm1.lemonsaml.linagora.com/%3Fopenid%3D1%26lmAuth%3D2OpenID%26oic.time%3D1304351669-dab6b201beda30620859&openid.response_nonce=2011-05-02T15:56:03ZW3EeYE&openid.assoc_handle=1304351670:2TKNyP679ZL6J1S9i0TH:3e0d127809&openid.ns=http://specs.openid.net/auth/2.0&openid.signed=mode,claimed_id,identity,op_endpoint,return_to,response_nonce,assoc_handle&openid.sig=tOO9kHJgQKajdnb6qTLMCSREdO0%3D
  38. 38. SAML <ul><li>Security Assertion Markup Language
  39. 39. XML, XML Security
  40. 40. Cercle de confiance : enregistrement préalable des fournisseurs de services et des fournisseurs d'identités
  41. 41. Plusieurs méthodes : GET / POST / Artefact GET / Artefact POST
  42. 42. Gestion de conditions, contextes d'authentification, ... </li></ul>
  43. 43. SAML, gloire et beauté SAML 1.0 WS-* ID-FF 1.2 ID-WSF 1.2 Shibboleth 1 SAML 2.0 ID-WSF 2.0
  44. 44. Cinématique SAML 2.0 1. Premier accès à l'application IDP SAML SP SAML 2. Authentification sur le serveur SAML choisi par l'utilisateur et autorisé dans le cercle de confiance 3. Réponse SAML IDP SAML IDP SAML
  45. 45. Requête SAML <samlp:AuthnRequest xmlns:samlp=&quot;urn:oasis:names:tc:SAML:2.0:protocol&quot; xmlns:saml=&quot;urn:oasis:names:tc:SAML:2.0:assertion&quot; ID=&quot;_d7607d551380ac97853a6ff4907c4ef01219be97dd&quot; Version=&quot;2.0&quot; IssueInstant=&quot;2008-05-27T07:46:06Z&quot; ForceAuthn=&quot;true&quot; IsPassive=&quot;false&quot; Destination=&quot;https://openidp.feide.no/simplesaml/saml2/idp/SSOService.php&quot; ProtocolBinding=&quot;urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST&quot; AssertionConsumerServiceURL=&quot;http://dev.andreas.feide.no/simplesaml/saml2/sp/AssertionConsumerService.php&quot;> <saml:Issuer>http://dev.andreas.feide.no/simplesaml/saml2/sp/metadata.php</saml:Issuer> <samlp:NameIDPolicy Format=&quot;urn:oasis:names:tc:SAML:2.0:nameid-format:transient&quot; AllowCreate=&quot;true&quot;/> </samlp:AuthnRequest>
  46. 46. Réponse SAML <?xml version=&quot;1.0&quot;?> <samlp:Response xmlns:samlp=&quot;urn:oasis:names:tc:SAML:2.0:protocol&quot; xmlns:saml=&quot;urn:oasis:names:tc:SAML:2.0:assertion&quot; xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; ID=&quot;_162f441d28cff78e3bb1d3c2bf3e48b5ed532605fd&quot; InResponseTo=&quot;_ae0216740b5baa4b13c79ffdb2baa82572788fd9a3&quot; Version=&quot;2.0&quot; IssueInstant=&quot;2008-05-27T07:49:23Z&quot; Destination=&quot;https://foodle.feide.no/simplesaml/saml2/sp/AssertionConsumerService.php&quot;> <saml:Issuer xmlns:saml=&quot;urn:oasis:names:tc:SAML:2.0:assertion&quot;>https://openidp.feide.no</saml:Issuer> <samlp:Status xmlns:samlp=&quot;urn:oasis:names:tc:SAML:2.0:protocol&quot;> <samlp:StatusCode xmlns:samlp=&quot;urn:oasis:names:tc:SAML:2.0:protocol&quot; Value=&quot;urn:oasis:names:tc:SAML:2.0: status:Success &quot;/> </samlp:Status> <saml:Assertion Version=&quot;2.0&quot; ID=&quot;pfxb27555d8-8c06-a339-c7ae-f544b2fd1507&quot; IssueInstant=&quot;2008-05-27T07:49:23Z&quot;> <saml:Issuer>https://openidp.feide.no</saml:Issuer> <ds:Signature xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/> <ds:SignatureMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#rsa-sha1&quot;/> <ds:Reference URI=&quot;#pfxb27555d8-8c06-a339-c7ae-f544b2fd1507&quot;> <ds:Transforms> <ds:Transform Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#enveloped-signature&quot;/> <ds:Transform Algorithm=&quot;http://www.w3.org/2001/10/xml-exc-c14n#&quot;/> </ds:Transforms> <ds:DigestMethod Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#sha1&quot;/> <ds:DigestValue>WUaqPW4nZ8uPyv+sf8qXsaKhHmk=</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue>CRq1VvptjNHenZ5aWkyD6GqQX+XLgNiqElJnyLbMUgiwrFZ5J8IEGtC8h2YiwID15ScxVt6tjQc8R3gXkP967PIlemmhYQ4US7V3oPczu4MECamj+07wAg7BCp05UVU3RI3pvi/2dQGRRX4tlXgkzUMzx8+cBeyZaI/BXKjhKEY=</ds:SignatureValue> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate>MIICizCCAfQCCQCY8tKaMc0BMjANBgkqhkiG9w0BAQUFADCBiTELMAkGA1UEBhMCTk8xEjAQBgNVBAgTCVRyb25kaGVpbTEQMA4GA1UEChMHVU5JTkVUVDEOMAwGA1UECxMFRmVpZGUxGTAXBgNVBAMTEG9wZW5pZHAuZmVpZGUubm8xKTAnBgkqhkiG9w0BCQEWGmFuZHJlYXMuc29sYmVyZ0B1bmluZXR0Lm5vMB4XDTA4MDUwODA5MjI0OFoXDTM1MDkyMzA5MjI0OFowgYkxCzAJBgNVBAYTAk5PMRIwEAYDVQQIEwlUcm9uZGhlaW0xEDAOBgNVBAoTB1VOSU5FVFQxDjAMBgNVBAsTBUZlaWRlMRkwFwYDVQQDExBvcGVuaWRwLmZlaWRlLm5vMSkwJwYJKoZIhvcNAQkBFhphbmRyZWFzLnNvbGJlcmdAdW5pbmV0dC5ubzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAt8jLoqI1VTlxAZ2axiDIThWcAOXdu8KkVUWaN/SooO9O0QQ7KRUjSGKN9JK65AFRDXQkWPAu4HlnO4noYlFSLnYyDxI66LCr71x4lgFJjqLeAvB/GqBqFfIZ3YK/NrhnUqFwZu63nLrZjcUZxNaPjOOSRSDaXpv1kb5k3jOiSGECAwEAATANBgkqhkiG9w0BAQUFAAOBgQBQYj4cAafWaYfjBU2zi1ElwStIaJ5nyp/s/8B8SAPK2T79McMyccP3wSW13LHkmM1jwKe3ACFXBvqGQN0IbcH49hu0FKhYFM/GPDJcIHFBsiyMBXChpye9vBaTNEBCtU3KjjyG0hRT2mAQ9h+bkPmOvlEo/aH0xR68Z9hw4PF13w==</ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> </ds:Signature> <saml:Subject> <saml:NameID Format=&quot;urn:oasis:names:tc:SAML:2.0:nameid-format:transient&quot; SPNameQualifier=&quot;urn:mace:feide.no:services:no.feide.foodle&quot; >_242f88493449e639aab95dd9b92b1d04234ab84fd8</saml:NameID> <saml:SubjectConfirmation Method=&quot;urn:oasis:names:tc:SAML:2.0:cm:bearer&quot;> <saml:SubjectConfirmationData NotOnOrAfter=&quot;2008-05-27T07:54:23Z&quot; InResponseTo=&quot;_ae0216740b5baa4b13c79ffdb2baa82572788fd9a3&quot; Recipient=&quot;https://foodle.feide.no/simplesaml/saml2/sp/AssertionConsumerService.php&quot; /> </saml:SubjectConfirmation> </saml:Subject> <saml:Conditions NotBefore=&quot;2008-05-27T07:48:53Z&quot; NotOnOrAfter=&quot;2008-05-27T07:54:23Z&quot;> <saml:AudienceRestriction> <saml:Audience>urn:mace:feide.no:services:no.feide.foodle</saml:Audience> </saml:AudienceRestriction> </saml:Conditions> <saml:AuthnStatement AuthnInstant=&quot;2008-05-27T07:49:23Z&quot; SessionIndex=&quot;_4f39c931b35a8dd4540b0a6929a361fa134ec8f7b5&quot;> <saml:AuthnContext> <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef> </saml:AuthnContext> </saml:AuthnStatement> </saml:Assertion> </samlp:Response>
  47. 47. Que choisir ?
  48. 48. Différents protocoles pour différents usages <ul><li>CAS : authentification seulement, applications déjà « CASsifiées » </li></ul><ul><li>OpenID : applications grand public </li></ul><ul><li>SAML : partage d'identité entre organismes </li></ul>
  49. 49. Des solutions libres dans le langage qui vous plaît <ul><li>Authentic, Authentic 2 : IDP en Python basé sur Lasso
  50. 50. OpenSSO / OpenAM : IDP / SP en Java
  51. 51. LemonLDAP::NG : IDP / SP en Perl basé sur Lasso pour la gestion de SAML 2.0
  52. 52. SimpleSAMLPHP : IDP / SP en PHP
  53. 53. Shibboleth 2 : IDP / SP en Java </li></ul>
  54. 54. <ul>Vos questions ? </ul><ul>27.10.2011 </ul><ul>Application Security Forum - Western Switzerland - 2011 </ul><ul></ul><ul>© flickr.com/horiavarlan </ul>
  55. 55. <ul>Merci! </ul><ul>Clément Oudot Identica @coudot <li>Twitter @clementoudot </li></ul><ul>27.10.2011 </ul><ul>Application Security Forum - Western Switzerland - 2011 </ul><ul></ul><ul>SLIDES A TELECHARGER PROCHAINEMENT: http://slideshare.net/ASF-WS </ul>

×