Upload
oudot-clement
View
2.290
Download
2
Embed Size (px)
Citation preview
JDLL 2011
CAS, OpenID, SAML : concepts, différences et exemples
Clément OUDOT
18 novembre 2011
http://lemonldap-ng.org217/11/11
Sommaire
● WebSSO, contrôle d'accès et fédération d'identité
● Les protocoles● CAS● OpenID● SAML
● Que choisir ?
http://lemonldap-ng.org317/11/11
Présentations
http://lemonldap-ng.org417/11/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
http://lemonldap-ng.org517/11/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● Version 1.2.0 en prévision décembre 2011
http://lemonldap-ng.org617/11/11
WebSSO, contrôle d'accès et fédération d'identité
http://lemonldap-ng.org717/11/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é
http://lemonldap-ng.org817/11/11
Intérêt du WebSSO : éviter la multiplication des identités
Utilisateur
Application Web
Portail WebSSO
1
2
3
Cinématique simple
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'identité Fournisseur de service
Fournisseur d'attribut
Interaction utilisateur
Appel distant
http://lemonldap-ng.org1317/11/11
Protocoles
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
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
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=ST6096f5d3ddb33df6fd79529e2d626a6d
CAS
● Requête validation ticket CAS :https://auth.example.com/cas/serviceValidate?service=http://auth.example.com/cas.pl&ticket=ST6096f5d3ddb33df6fd79529e2d626a6d
● 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>
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
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
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%3D1304351669dab6b201beda30620859&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
Réponse OpenID
http://auth.vm1.lemonsaml.linagora.com/?openid=1&lmAuth=2OpenID&oic.time=1304351669dab6b201beda30620859&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%3D1304351669dab6b201beda30620859&openid.response_nonce=20110502T15: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
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é
SAML 1.0
WS-*
ID-FF 1.2
ID-WSF 1.2
Shibboleth 1
SAML 2.0
ID-WSF 2.0
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
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="20080527T07: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:HTTPPOST" 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:nameidformat:transient" AllowCreate="true"/></samlp:AuthnRequest>
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>
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
● OpenSSO / OpenAM : IDP / SP en Java ● LemonLDAP::NG : IDP / SP en Perl basé sur
Lasso pour la gestion de SAML 2.0● SimpleSAMLPHP : IDP / SP en PHP● Shibboleth : IDP / SP en Java
http://lemonldap-ng.org3017/11/11
Questions ?