30
Rencontres Mondiales Du Logiciel Libre CAS, OpenID, SAML : concepts, différences et exemples Clément OUDOT 13 juillet 2011

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

Embed Size (px)

DESCRIPTION

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.

Citation preview

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

Rencontres MondialesDu Logiciel Libre

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

Clément OUDOT

13 juillet 2011

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

http://lemonldap-ng.org212/07/11

Sommaire

● WebSSO, contrôle d'accès et fédération d'identité

● Les protocoles● CAS● OpenID● SAML

● Que choisir ?

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

http://lemonldap-ng.org312/07/11

Présentations

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

http://lemonldap-ng.org412/07/11

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

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

http://lemonldap-ng.org512/07/11

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

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

http://lemonldap-ng.org612/07/11

WebSSO, contrôle d'accès et fédération d'identité

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

http://lemonldap-ng.org712/07/11

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é

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

http://lemonldap-ng.org812/07/11

Intérêt du WebSSO : éviter la multiplication des identités

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

Utilisateur

Application Web

Portail WebSSO

1

2

3

Cinématique simple

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

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)

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

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)

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

Intérêt de la fédération d'identités : protection de la vie privée

Fournisseur de service

Fournisseur d'identité Fournisseur de service

Fournisseur d'attribut

Interaction utilisateur

Appel distant

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

http://lemonldap-ng.org1312/07/11

Protocoles

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

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

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

Cinématique CAS

1. Premier accès à l'application

Serveur CAS

Application « CASsifiée »

2. Authentification sur CASet récupération d'un ticket

3. Transmission du ticket

4. Validation du ticketet récupération de l'identifiant

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

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

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

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

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

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

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

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

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

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 

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

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 

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

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, ...

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

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

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

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

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

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/SSOService.php"    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP­POST"    AssertionConsumerServiceURL="http://dev.andreas.feide.no/simplesaml/saml2/sp/AssertionConsumerService.php">   <saml:Issuer>http://dev.andreas.feide.no/simplesaml/saml2/sp/metadata.php</saml:Issuer>    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid­format:transient"        AllowCreate="true"/></samlp:AuthnRequest>

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

Réponse SAML<?xml version="1.0"?><samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 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: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="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>

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

Que choisir ?

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

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

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

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

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

http://lemonldap-ng.org3012/07/11

Questions ?