delegation d'authentification

Post on 24-May-2015

7.527 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

Définitions

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

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

OpenID en image

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.

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.

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.

OpenID v1

OpenID v1

OpenID v1

OpenID v1

OpenID v1

• Découverte dynamique +

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/" />

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>

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

OpenID Connect

Etat du marché

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

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 .

OAuth 2 : Profil Web Server

OAuth 2 : Profil User Agent

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.

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

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

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"}

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

OAuth 2 : OAuth sur mobile

OAuth 2 : OAuth sur mobile

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

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

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.

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

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" },

…] }

OpenID et OAuth : Ressources

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

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/

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

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.

Contact

• Sébastien Brault• sebastien.brault@gmail.com

top related