29
Application Security Forum Western Switzerland 27 octobre 2011 - HEIGVD Yverdon-les-Bains http://appsec-forum.ch CAS, OpenID, SAML : concepts, différences et exemples Clément Oudot LDAP / IAM expert LINAGORA

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

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

27.10.2011 Application Security Forum - Western Switzerland - 2011 4

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

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

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

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

27.10.2011 Application Security Forum - Western Switzerland - 2011 6

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

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

27.10.2011 Application Security Forum - Western Switzerland - 2011

Utilisateur

Application Web

Portail WebSSO

1

2

3

Cinématique simple

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

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)

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

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)

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

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

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

27.10.2011 Application Security Forum - Western Switzerland - 2011 11

Protocoles

Page 12: ASFWS 2011 : CAS, OpenID, 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 13: ASFWS 2011 : CAS, OpenID, 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 14: ASFWS 2011 : CAS, OpenID, 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 15: ASFWS 2011 : CAS, OpenID, 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> 

Page 16: ASFWS 2011 : CAS, OpenID, 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 17: ASFWS 2011 : CAS, OpenID, 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 18: ASFWS 2011 : CAS, OpenID, 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 19: ASFWS 2011 : CAS, OpenID, 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 20: ASFWS 2011 : CAS, OpenID, 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 21: ASFWS 2011 : CAS, OpenID, 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 22: ASFWS 2011 : CAS, OpenID, 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 23: ASFWS 2011 : CAS, OpenID, 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 24: ASFWS 2011 : CAS, OpenID, 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 25: ASFWS 2011 : CAS, OpenID, SAML  concepts, différences et exemples

Que choisir ?

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

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

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

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

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

Vos questions ?

27.10.2011 Application Security Forum - Western Switzerland - 2011 28

© fl

ickr

.com

/hor

iava

rlan

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

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