4. 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.
5. 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.
6. 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.
14. 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.
15. 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.
16. 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.
17. 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.
18. 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.
19. 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.
20. 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.
21. 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.
22. 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.
23. 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.
25. Etat du marché
Source : http://info.gigya.com/Identity.html
26. 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 .
29. 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.
30. OAuth 2 : Exemples de requêtes
• Demande d’autorisation :
– GET
/authorize?response_type=code&client_id=s6BhdRkqt3&redirec
t_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 Found
Location:
http://example.com/rd#access_token=FJQbwq9&expires_in=36
00
31. OAuth 2 : Exemples de requêtes
• Récupération de l’access token :
– POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&client_id=s6BhdRkqt3&code=i1WsRn
1uB1&
redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
– POST /token HTTP/1.1
Host: server.example.com
Content-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
32. 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/json
Cache-Control: no-store
{
"access_token":"SlAV32hkKG",
"expires_in":3600,
"refresh_token":"8xLOxBtZp8"
}
33. 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.com
Authorization: OAuth vF9dft4qmT
– GET /resource?oauth_token=vF9dft4qmT HTTP/1.1
Host: server.example.com
– POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
oauth_token=vF9dft4qmT
35. OAuth 2 : OAuth sur mobile
• La mécanique de délégation d'authentification est
basé sur OAuth.
36. 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=fbc
onnect://success&sdk=2&scope=read_stream,offline_access&client_i
d=155031251206434
• Exemple d'appel du serveur Facebook via Safari mobile :
– https://www.facebook.com/dialog/oauth?type=user_agent&display=t
ouch&redirect_uri=fb155031251206434://authorize&sdk=2&scope=re
ad_stream,offline_access&client_id=155031251206434
37. OAuth 2 : Etape 2, appel serveur
et écran de privacy
Larequête OAuth est
relayée coté serveur.
• Exemple de requête :
– https://www.facebook.com/dialog/oauth?type=user_
agent&display=touch&redirect_uri=fb1550312512064
34://authorize&sdk=2&scope=read_stream,offline_ac
cess&client_id=155031251206434
38. 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
39. 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" },
…]
}
40. OpenID et OAuth : Ressources
• http://openid.net/developers/libraries/
42. 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/)
43. 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_retur
n_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.