asfws 2011 : cas, openid, saml concepts, différences et exemples
TRANSCRIPT
Application Security ForumWestern Switzerland
27 octobre 2011 - HEIGVD Yverdon-les-Bainshttp://appsec-forum.ch
CAS, OpenID, SAML : concepts, différences et exemples
Clément OudotLDAP / IAM expert
LINAGORA
Présentation personnelle
Ingénieur LDAP, IAM et fédération des identités à LINAGORA depuis 2003
Leader des projets communautaires :LemonLDAP::NG (http://lemonldap-ng.org)
LDAP Tool Box (http://ltb-project.org)
27.10.2011 2Application Security Forum - Western Switzerland - 2011
Agenda
WebSSO, contrôle d'accès et fédération d'identité
Les protocolesCAS
OpenID
SAML
Que choisir ?
27.10.2011 Application Security Forum - Western Switzerland - 2011 3
27.10.2011 Application Security Forum - Western Switzerland - 2011 4
WebSSO, contrôle d'accès et fédération d'identité
27.10.2011 Application Security Forum - Western Switzerland - 2011 5
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.)
27.10.2011 Application Security Forum - Western Switzerland - 2011 6
Intérêt du WebSSO : éviter la multiplication des identités
27.10.2011 Application Security Forum - Western Switzerland - 2011
Utilisateur
Application Web
Portail WebSSO
1
2
3
Cinématique simple
27.10.2011 Application Security Forum - Western Switzerland - 2011
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)
27.10.2011 Application Security Forum - Western Switzerland - 2011
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)
27.10.2011 Application Security Forum - Western Switzerland - 2011
Cercle de confianceFournisseur de service
Fournisseur d'identité Fournisseur de service
Fournisseur d'attribut
Interaction utilisateur
Appel distant
27.10.2011 Application Security Forum - Western Switzerland - 2011 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>
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 ?
27.10.2011 Application Security Forum - Western Switzerland - 2011
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
27.10.2011 Application Security Forum - Western Switzerland - 2011
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 2 : IDP / SP en Java
Vos questions ?
27.10.2011 Application Security Forum - Western Switzerland - 2011 28
© fl
ickr
.com
/hor
iava
rlan
Merci!
Clément Oudot
Identica @coudot
Twitter @clementoudot
27.10.2011 Application Security Forum - Western Switzerland - 2011 29
SLIDES A TELECHARGER PROCHAINEMENT:http://slideshare.net/ASF-WS