delegation d'authentification

44
OpenID, OAuth, délégation d’authentification 10 janvier 2012 Sébastien Brault et Gaël Gourmelen

Upload: sebastien-brault

Post on 24-May-2015

7.527 views

Category:

Technology


1 download

DESCRIPTION

Historique et état des implémentation OpenID et OAuth, futures évolutions et solutions alternatives.

TRANSCRIPT

Page 1: Delegation d'authentification

OpenID, OAuth, délégation d’authentification10 janvier 2012Sébastien Brault et Gaël Gourmelen

Page 2: Delegation d'authentification

Définitions

• OpenID : Protocole de délégation d'authentification.

• OAuth : Protocole de délégation d'autorisation d'accès à des API.

Page 3: Delegation d'authentification

OpenID en image

Page 4: Delegation d'authentification

OAuth par l’exemple

« OAuth est comme une clé de service pour pour vos API web. Une clé de service donne la possibilité de garer votre voiture, mais pas la possibilité d'en ouvrir le coffre, de conduire plus de 2 kilomètres ou d'amener dans le rouge le régime moteur de votre toute nouvelle voiture de sport allemande. De la même façon, un jeton OAuth laisse à un tiers la possibilité de lire votre mail, mais pas la possibilité d'envoyer à votre nom des mails aux personnes présentes dans votre carnet d'adresses. »

John Panzer, Google.

Page 5: Delegation d'authentification

OpenID v1

• Première version en mai 2005, Brad Fitzpatrick.

• Implémentations propriétaires de protocoles équivalents : Yahoo! BBAuth, OpenAuth AOL, AuthSub Google, FlickrAuth, eBay.

Page 6: Delegation d'authentification

OpenID v1

• Système décentralisé de Single Sign On (SSO)• Standardisé, léger, simple. • Un identifiant OpenID c’est une URL. • Découverte dynamique du fournisseur OpenID

(YADIS de Netmesh + XRDS).• En 2006 : Simple Registration (SREG) puis

Attribute Exchange (AX), standardisation des extensions.

Page 7: Delegation d'authentification

OpenID v1

Page 8: Delegation d'authentification

OpenID v1

Page 9: Delegation d'authentification

OpenID v1

Page 10: Delegation d'authentification

OpenID v1

Page 11: Delegation d'authentification

OpenID v1

• Découverte dynamique +

Page 12: Delegation d'authentification

OpenID v1

• Source de http://openid.orange.fr/sebastien.brault

– <link rel="openid.server" href="http://openid.orange.fr/server/" />

– <link rel="openid2.provider" href="http://openid.orange.fr/server/" />

Page 13: Delegation d'authentification

OpenID v1

• Requête avec "Accept: application/xrds+xml » comme header• <?xml version="1.0" encoding="UTF-8"?>

<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0) »><XRD> <Service> <Type>http://specs.openid.net/auth/2.0/signon</Type> <Type>http://openid.net/signon/1.2</Type> <Type>http://openid.net/signon/1.1</Type> <Type>http://openid.net/signon/1.0</Type> <Type>http://openid.net/srv/ax/1.0</Type> <Type>http://openid.net/sreg/1.0</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <URI priority="20">http://openid.orange.fr/server/</URI> </Service></XRD>

Page 14: Delegation d'authentification

OpenID v1

• En 2006-2007 :– Intérêt Symantec, Microsoft, AOL, SUN.– Création de l’OpenID Foundation (Public-Benefit

corporation). – Publication d’OpenID 2.0 et AX 1.0 en décembre.

Page 15: Delegation d'authentification

OpenID v2

• Principaux apports de la 2.0 :– Directed identity.– AX et un meilleur support des extensions. – Support des requêtes/réponses plus

volumineuses.

Page 16: Delegation d'authentification

OpenID v2

• 2008 :– Implémentations OpenID 2.0 chez les GYM. – Entrée de Google, IBM, Microsoft, Verisign et Yahoo! à

l’OpenID fundation. • Fin du hype :– Paypal rejoint l’OpenID fundation. – Facebook devient OpenID consumer. – Plus de provider que de consumer.

• Facebook implémente Facebook Connect.

Page 17: Delegation d'authentification

OAuth v1

• 2006 : Blaine Cook (Twitter) et Larry Halff (Ma.gnolia) rencontrent Chris Messina et David Recordon pour discuter de la possibilité d'utiliser OpenID pour gérer la délégation d'accès aux APIs.

Page 18: Delegation d'authentification

OAuth v1

• 2007 :– Création d'une groupe de discussion en avril.– Premier draft en juillet. – Draft final de la version 1.0 publié en Octobre.– Google et Yahoo! sont très rapidement intéressés

par OAuth et migrent progressivement l’accès à leurs API vers OAuth.

Page 19: Delegation d'authentification

OAuth v1

• 2008 : Création d'un BOF au meeting IETF de novembre 2008. (Facebook lance Facebook Connect)

• 2009 : Publication de OAuth WRAP (Web Ressource Authorization Protocol) Dick Hardt (Microsoft), Brian Eaton (Google) et Tom Allen (Yahoo!).

• 2010 : Publication de la RFC en avril 2010.

Page 20: Delegation d'authentification

OAuth v2

• David Recordon (Facebook) publie un draft de OAuth 2.0.

• OAuth 2.0 reprend des éléments de OAuth 1.0 et WRAP avec comme Objectif la simplicité, spectre plus large que le web, possibilité d'extensions.

• Facebook en propose une implémentation pendant l'été 2010.

Page 21: Delegation d'authentification

OpenID Connect

• 2010 : David Recordon propose OpenID Connect, une version d'OpenID basée sur OAuth :– OpenID est devenu trop complexe (3000 lignes de PHP

pour le simple discovery).– Les sites tiers veulent plus qu'un identifiant unique et

OpenID/OAuth Hybrid est aussi trop complexe.

Page 22: Delegation d'authentification

OpenID Connect

• 2010 : Nat Sakimura, John Bradley, Allen Tom, Will Norris produisent OpenID Artifact Binding :– optimisé pour les browser mobiles.– évite que des contenus non chiffrés ne passent par le

browser.

Page 23: Delegation d'authentification

OpenID Connect

• 2011 : Les deux groupes vont fusionner pour créer OpenID AB/C qui va donner OpenID Connect.

• Les spécifications sont terminées et ont été proposées pour validation le 24 décembre 2011.

Page 24: Delegation d'authentification

OpenID Connect

Page 25: Delegation d'authentification

Etat du marché

Source : http://info.gigya.com/Identity.html

Page 26: Delegation d'authentification

OAuth 2 : Cinématiques et implémentations

Étape 1 : Le client doit obtenir le consentement de l'utilisateur d'accéder à une ressource.Étape 2 : Le client échange ce consentement contre un jeton d'accès qui lui permet de faire valoir son droit d'accès.Étape 3 : Le client présente ce jeton pour accéder à la ressource .

Page 27: Delegation d'authentification

OAuth 2 : Profil Web Server

Page 28: Delegation d'authentification

OAuth 2 : Profil User Agent

Page 29: Delegation d'authentification

OAuth 2 : Profil Native Application

• Le profile native application s'applique aux applications qui s'exécutent en dehors d'un navigateur, applications compilées ou interprétées.

• OAuth ne définit pas de cinématique mais décrit des scenarii possibles en fonction des possibilités qu'ont les applications natives d'interagir avec un user-agent.

Page 30: Delegation d'authentification

OAuth 2 : Exemples de requêtes

• Demande d’autorisation :– GET /authorize?

response_type=code&client_id=s6BhdRkqt3&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1

• Réponse pour une requête dont le response_type était code :– HTTP/1.1 302 Found

Location: https://client.example.com/cb?code=i1WsRn1uB1• Réponse pour une requête dont le response_type était token.

– HTTP/1.1 302 FoundLocation: http://example.com/rd#access_token=FJQbwq9&expires_in=3600

Page 31: Delegation d'authentification

OAuth 2 : Exemples de requêtes

• Récupération de l’access token :

– POST /token HTTP/1.1Host: server.example.comAuthorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JWContent-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=s6BhdRkqt3&code=i1WsRn1uB1&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb

– POST /token HTTP/1.1Host: server.example.comContent-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=s6BhdRkqt3&client_secret=gX1fBat3bV&code=i1WsRn1uB1&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb

Page 32: Delegation d'authentification

OAuth 2 : Exemples de requêtes

• Le corps de la réponse http est encodé en utilisant le format application/json : – HTTP/1.1 200 OK

Content-Type: application/jsonCache-Control: no-store{"access_token":"SlAV32hkKG","expires_in":3600,"refresh_token":"8xLOxBtZp8"}

Page 33: Delegation d'authentification

OAuth 2 : Exemples de requêtes

• Requêtes d'accès : le client peut le passer de trois façons différentes :– GET /resource HTTP/1.1

Host: server.example.comAuthorization: OAuth vF9dft4qmT

– GET /resource?oauth_token=vF9dft4qmT HTTP/1.1Host: server.example.com

– POST /resource HTTP/1.1Host: server.example.comContent-Type: application/x-www-form-urlencoded

oauth_token=vF9dft4qmT

Page 34: Delegation d'authentification

OAuth 2 : OAuth sur mobile

Page 35: Delegation d'authentification

OAuth 2 : OAuth sur mobile

• La mécanique de délégation d'authentification est basé sur OAuth.

Page 36: Delegation d'authentification

OAuth 2 : Etape 1, déclenchement de le demande d'authentification.

• La requête est forgée à l'aide d'un SDK fourni par Facebook :

• Exemple d'appel de l'application Facebook mobile : – fbauth://authorize?

type=user_agent&display=touch&redirect_uri=fbconnect://success&sdk=2&scope=read_stream,offline_access&client_id=155031251206434

• Exemple d'appel du serveur Facebook via Safari mobile : – https://www.facebook.com/dialog/oauth?

type=user_agent&display=touch&redirect_uri=fb155031251206434://authorize&sdk=2&scope=read_stream,offline_access&client_id=155031251206434

Page 37: Delegation d'authentification

OAuth 2 : Etape 2, appel serveur et écran de privacy

• Exemple de requête : – https://www.facebook.com/dialog/oauth?

type=user_agent&display=touch&redirect_uri=fb155031251206434://authorize&sdk=2&scope=read_stream,offline_access&client_id=155031251206434

La requête OAuth est relayée coté serveur.

Page 38: Delegation d'authentification

OAuth 2 : Etape 3 & 4, réponse à la requête et envoie

• Réponse Facebook transmise à l'application tierce via une URL scheme.

• Exemple de réponse relayée à l'application: – fb155031251206434://authorize/#access_token=155031251206434|

2ea5e5126488904630d97f3d-699282346|t3QBmuTirdFX-7atcH3-P7TBG0Y&expires_in=0

Page 39: Delegation d'authentification

OAuth 2 : Etape 5 & 6, appel d'une API Facebook

• L'application tierce fait un appel à l'API Facebook : https://graph.facebook.com/me/friends?access_token=2227470867|2._E8AEdZXV4iGeTkRL_umzg__.3600.1291042800-699282346|JPtkpP1k72pP-vMSRp_6H5VQWfA

• Réponse formatée JSON: { "data": [

{ "name": "Guillaume Martin", "id": "544219987" }, { "name": "Philippe Martin", "id": "545529413" },

…] }

Page 40: Delegation d'authentification

OpenID et OAuth : Ressources

• http://openid.net/developers/libraries/

Page 41: Delegation d'authentification

OpenID et OAuth : Ressources

• OAuth 1.0 :– Yahoo : http://developer.yahoo.com/oauth/guide/– Twitter : https://dev.twitter.com/docs/auth/oauth-landing

• Oauth 2.0 :– Google : http://code.google.com/intl/fr-FR/apis/accounts/docs/

OAuth2Login.html– Google Oauth playground :

https://code.google.com/oauthplayground/– Facebook : https://developers.facebook.com/docs/authentication/

Page 42: Delegation d'authentification

OpenID et OAuth : Alternatives

• Sélecteur d’identité ou sélecteur de fournisseurs d’identité ou Social Widget :– Janrain Enga ge (http://www.janrain.com/products/engage)– Gigya (http://www.gigya.com/social-login/)– IdSelector (http://idselector.orange.com/)– Google Account Chooser (http://accountchooser.com/index.html) et site de

démonstration (http://www.openidsamplestore.com/basic/)

Page 43: Delegation d'authentification

OpenID et Oauth : Alternatives

• En mode web : • Inclure dans la section header de la page

<script src="http://[application_identifier ].connect.orange.fr/loadwidget?return_url=[partner_return_url ]" type="text/javascript"></script>

• Inclure dans la page<a class="OrangeConnect" href="">Sign in</a>

• Terminaux mobiles et tablettes sont supportés. • Support des applications natives : SDK et applications

d’exemples existent pour iOS et Android.

Page 44: Delegation d'authentification

Contact

• Sébastien Brault• [email protected]