OAuth

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

OAuth est un protocole libre, créé par Blaine Cook et Chris Messina. Il permet l'authentification d'un site web utilisant l'API sécurisée d'une autre application.

OAuth permet aux utilisateurs de donner, à un site « consommateur », l'accès à des informations personnelles provenant d'un site « fournisseur » de service ou de données, ceci tout en protégeant le pseudonyme et le mot de passe des utilisateurs. Par exemple, un site de manipulation de vidéos pourra éditer les vidéos enregistrées sur Dailymotion d'un utilisateur des deux sites, à sa demande.

La partie principale de ce protocole, OAuth Core 1.0, a été finalisée le .

Logo d'OAuth

Histoire[modifier | modifier le code]

OAuth a commencé en novembre 2006, alors que Blaine Cook implémentait OpenID pour Twitter. Avec Chris Messina, ils rencontrèrent David Recordon et Larry Halff pour discuter de la possibilité d'utiliser OpenID et l'API de Twitter pour déléguer l'authentification. Ils conclurent qu'il n'y avait pas de standard ouvert pour la délégation d'accès par API.

Un groupe de travail a été créé en avril 2007 pour rédiger un premier jet de proposition pour un protocole ouvert. DeWitt Clinton de Google fut informé du projet OAuth et affirma sa volonté de soutenir le standard. En juillet 2007, l'équipe rédigea les premières spécifications à l'état de Draft (brouillon). Le 3 octobre 2007, la version OAuth Core 1.0 était publiée.

Le 24 juin 2009, la version OAuth Core 1.0a venait corriger une faille de sécurité.

En avril 2010, la RFC 5849 standardise OAuth 1.0a.

En octobre 2012, les RFC 6749 et RFC 6750 standardisent OAuth 2.0.

Applications utilisant OAuth[modifier | modifier le code]

Quelques applications utilisant OAuth :

Fournisseur de service Protocole OAuth
Dailymotion 2.0
deviantART 2.0 drafts 10 et 15
Discogs 1.0a
Dropbox 1.0
Evernote 1.0
Facebook 2.0 draft 12[1]
Flickr 1.0a
Foursquare 2.0
GitHub 2.0
Gmail 1[2]
Google 2.0
Google App Engine 1.0a [3]
Instagram 2.0
LinkedIn 1.0a, 2.0[4]
Microsoft 2.0
Mixi 1.0[5]
Myspace 1.0a
Netflix 1.0a
OpenStreetMap 1
PayPal 2.0
Reddit 2.0[6]
Salesforce.com 1.0a, 2.0
Sina Weibo 2.0
StatusNet 1.0a
Tumblr 1.0a
Twitter 1.0a
Ubuntu One 1.0
Viadeo 2.0[7]
Vimeo 1.0a
VK 2.0
XING 1.0[8]
Yahoo! 1.0a
Yammer 2.0
Yandex 2.0
Yelp 1.0a
Zendesk 2.0

À contrario, MediaWiki n'utilise pas OAuth.

Exemple d'utilisation avec Google API en PHP[modifier | modifier le code]

Google fournit une documentation sur l'utilisation de OAuth2.0 avec ses APIs.

L'utilisation de OAuth se décompose en plusieurs étapes:

  1. On redirige l'utilisateur vers une page de Google demandant à l'utilisateur s'il accepte de fournir certaines de ses informations personnelles à notre site web.
  2. Google redirige l'utilisateur vers une page de retour, spécifiée dans la requête précédente avec un code de retour.
  3. Le site demande à Google une clé d'accès aux APIs Google avec le code de retour que celui-ci nous a retourné précédemment.
  4. Le site utilise la clé d'accès fournie par Google pour obtenir des informations en effectuant des requêtes vers l'API Google souhaitée.

Rediriger l'utilisateur vers une page Google demandant l'autorisation à celui-ci de fournir des informations à notre site[modifier | modifier le code]

Dans une page du site, insérer un bouton pour rediriger vers Google:

<button>Autoriser ce site à utiliser mes informations personnelles sur Google</button>


Et définir une redirection vers la page de Google qui effectuera la demande d'autorisation:

$("button").click(function() {
	window.location = "https://accounts.google.com/o/oauth2/auth?" + 
				"scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&"+
				"state=%2Fprofile&"+
				"redirect_uri=http://localhost/oauth2callback.php&"+
				"response_type=code&"+
				"client_id=1049956440006.apps.googleusercontent.com";
});

Pour plus d'informations sur les paramètres envoyés à Google, consulter la documentation.

Récupérer le code de validation envoyé par Google et demander une clé d'accès aux APIs Google[modifier | modifier le code]

Comme précisé dans la requête envoyée précédemment, Google renvoie vers la page de callback (ici http://localhost/oauth2callback.php) avec deux paramètres HTTP : le paramètre state fourni dans l'URL ainsi que le code de validation. Pour récupérer le code de validation, il suffit d'utiliser la variable $_GET['code']

L'étape suivante consiste à envoyer une autre requête HTTP vers une URL de Google pour demander à celui-ci de retourner une clé d'accès (Access Token) aux APIs Google.

Il faut donc une requête HTTP pour effectuer une requête sur l'URL fournie par Google dans la documentation : https://accounts.google.com/o/oauth2/token en passant en paramètre le code de vérification que Google a retourné, le paramètre client_id et le paramètre secret_key fourni par l'API Google, une URL de retour (la même que dans la requête précédente) et un paramètre spécial nommé grant_type (OAuth2.0 précise de mettre la valeur authorization_code dans ce paramètre).

$r = new HttpRequest('https://accounts.google.com/o/oauth2/token', HttpRequest::METH_POST);
$fields = array(	'code'=> urlencode($codeGoogle),
		            'client_id'=>urlencode("1049956440006.apps.googleusercontent.com"),
		            'client_secret'=>urlencode("BpOaC4VbUZC7qgUqO8K4bF9D"),
		            'redirect_uri'=>"http://localhost/oauth2callback.php",
		            'grant_type'=>'authorization_code'
		        );
$r->addPostFields($fields);
 
try {
	$r->send();
	$bodyresponse =  $r->getResponseBody();
 
// Ici il suffit d'effectuer une requête sur une API Google avec la clé d'accès retournée dans la réponse JSON $bodyresponse
 
} catch (HttpException $ex) {
	echo $ex;
}

Cet exemple permet uniquement d'avoir accès à certaines informations provenant de Google : l'adresse de courriel de l'utilisateur et les informations du profil (photo, nom, etc.). Pour ajouter, modifier ou supprimer des informations, il faut modifier la variable scope dans la première requête envoyée à Google.

Notes et références[modifier | modifier le code]

  1. « OAuth 2.0 and the Road to Hell », Eran Hammer,‎ 28 juillet 2012 (consulté le 16 août 2012)
  2. OAuth access to IMAP/SMTP in Gmail
  3. https://developers.google.com/appengine/docs/java/oauth/overview?hl=it
  4. https://developer.linkedin.com/documents/authentication
  5. http://developer.mixi.co.jp/appli/ns/mob/2-legged-oauth/
  6. https://github.com/reddit/reddit/wiki/OAuth2
  7. http://dev.viadeo.com/documentation/authentication/oauth-authentication/
  8. https://dev.xing.com/docs/authentication

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]