Septembre 2008
Introduction
C'est une période passionnante pour les développeurs. Un certain nombre de normes ouvertes commencent à être adoptées sur le Web, et comme vous le savez, Google s'est toujours appliqué à l'utilisation de normes et encourageait la communauté Open Source.
Récemment, toutes les API Google Data ont pris en charge OAuth, un protocole ouvert qui vise à standardiser l'accès des applications Web et de bureau aux données privées des utilisateurs. OAuth permet d'authentifier les API de manière standard et sécurisée. En tant que programmeurs, nous apprenons à réutiliser le code autant que possible. OAuth aidera les développeurs à réduire la quantité de code en double qu'ils écrivent et facilitera la création d'outils fonctionnant avec plusieurs services de différents fournisseurs.
Audience
Cet article suppose que vous connaissiez une ou plusieurs des API Google Data, mais pas nécessairement les concepts qui sous-tendent OAuth. Si vous débutez, ou si vous êtes curieux de savoir OAuth, ne cherchez plus. Cet article vous donnera les bases. Je vous présenterai également en détail la mise en œuvre du protocole OAuth de Google.
Ce document est également destiné aux développeurs qui maîtrisent l'utilisation d'AuthSub, en particulier dans le mode enregistré avec la sécurité renforcée. Tout au long du processus, j'essaierai de souligner les similitudes et les différences entre les deux protocoles. Si vous avez des applications qui utilisent AuthSub, vous pouvez utiliser ces informations pour migrer vers OAuth, un protocole plus ouvert et plus moderne.
Un peu de terminologie
Pour comprendre OAuth, vous devez comprendre sa terminologie. La spécification OAuth et la documentation de Google concernant l'authentification OAuth pour les applications Web reposent en grande partie sur certaines définitions. Nous allons donc clarifier la signification de chacune d'entre elles dans le contexte de la mise en œuvre OAuth de Google.
- "Danse OAuth"
Mon terme non officiel décrivant le processus complet d'authentification/d'autorisation OAuth
- Jeton de requête (OAuth)
Jeton initial qui indique à Google que votre application demande l'accès à l'une des API Google Data. La deuxième étape de la danse OAuth consiste à accorder manuellement à l'utilisateur l'accès à ses données. Si cette étape réussit, le jeton de demande devient autorisé.
- Jeton d'accès (OAuth)
La dernière étape de la danse consiste à échanger le jeton de demande autorisé contre un jeton d'accès. Une fois que l'application dispose de ce jeton, l'utilisateur n'a pas besoin de recommencer la procédure de danse OAuth, à moins que le jeton ne soit révoqué.
Similarité à AuthSub:
Un jeton d'accès OAuth correspond à un jeton de session AuthSub sécurisé. - Points de terminaison OAuth
Il s'agit des URI requis pour authentifier une application et obtenir un jeton d'accès. Il y a trois au total : une pour chaque étape du processus OAuth. Les points de terminaison OAuth de Google sont les suivants:
Obtenez un jeton de requête: https://www.google.com/accounts/OAuthGetRequestToken
Autorisez le jeton de requête: https://www.google.com/accounts/OAuthAuthorizeToken
Passer à un jeton d'accès: https://www.google.com/accounts/OAuthGetAccessToken
Similarité à AuthSub :
L'échange d'un jeton de requête autorisé contre un jeton d'accès est semblable à la mise à niveau d'un jeton AuthSub à utilisation unique vers un jeton de session à longue durée de vie, respectivement danshttps://www.google.com/accounts/AuthSubRequestToken
ethttps://www.google.com/accounts/AuthSubSessionToken
. La différence est qu'AuthSub n'a pas de concept de jeton de requête initial. Au lieu de cela, l'utilisateur lance le processus de jeton à partir de la page d'autorisationAuthSubRequestToken
. - Fournisseur de services (OAuth)
Dans le cas des API Google Data, ce fournisseur est Google. En général, le fournisseur de services est utilisé pour décrire le site Web ou le service Web qui fournit les points de terminaison OAuth. MySpace est également un fournisseur de services OAuth.
- (OAuth) Consommateur
Programme demandant l'autorisation d'accéder aux données d'un utilisateur (c'est-à-dire votre application) Le protocole OAuth est flexible en ce sens qu'il autorise une grande variété de types de clients différents (Web, installés, bureau, mobile).
Remarque : Bien que le protocole OAuth soit compatible avec le cas d'utilisation des applications de bureau/installées, Google n'accepte que OAuth pour les applications Web.
Premiers pas
Inscription
Vous devez effectuer quelques configurations avant de pouvoir utiliser OAuth avec les API Google Data. Étant donné que toutes les requêtes OAuth doivent être signées numériquement, vous devez d'abord enregistrer votre domaine et importer un certificat public dans Google. Pour en savoir plus sur la procédure à suivre, consultez les pages Enregistrer des applications Web et Générer des clés et des certificats à utiliser avec le mode enregistré.
Signer les requêtes
Une fois votre domaine enregistré, vous pouvez commencer à signer des requêtes. L'un des concepts les plus difficiles d'OAuth est de savoir comment construire correctement oauth_signature
et la notion de chaîne de base de signature. La chaîne de base correspond aux données que vous signez avec votre clé privée (à l'aide de RSA_SHA1
). Le résultat est la valeur que vous avez définie pour oauth_signature
.
Exemple de requête
GET
une liste des agendas Google d'un utilisateur à l'adresse http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime
Format de chaîne de base | base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters |
---|---|
Exemple de chaîne de base | GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime |
Exemple de requête HTTP |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0" |
Remarque : Il s'agit uniquement de représentation. Votre oauth_signature
sera beaucoup plus long.
Remarques concernant la chaîne de base:
- Le paramètre de requête
orderby=starttime
est trié avec les autres paramètresoauth_*
dans l'ordre lexicographique des valeurs d'octet. - Cette chaîne ne contient pas non plus le caractère "?".
- La partie
base-http-request-url
ne contient que l'URL de base encodée au format URL:http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull
. oauth_token
est encodé au format URL double.
Remarques sur l'en-tête Authorization
:
- L'ordre des paramètres
oauth_*
n'a pas d'importance dans l'en-têteAuthorization
. - L'en-tête n'inclut pas
orderby=starttime
comme la chaîne de base l'a fait. Ce paramètre de requête est conservé dans l'URL de la requête.
Pour en savoir plus sur la signature des requêtes OAuth, consultez Signer des requêtes OAuth.
Différence avec AuthSub
À titre de comparaison, voici un exemple illustrant l'utilisation d'AuthSub :
Format de chaîne de base | base_string = http-method http-request-URL timestamp nonce |
---|---|
Exemple de chaîne de base |
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d |
Exemple de requête HTTP |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1" |
Pour en savoir plus sur la signature des requêtes à l'aide d'AuthSub, consultez la page Signer des requêtes AuthSub.
Outil OAuth Playground
Objectif
Certains utilisateurs ont suggéré que le protocole OAuth présente une courbe d'apprentissage élevée. Je suis d'accord avec les autres API d'authentification de Google. L'avantage d'OAuth est évident lorsque vous développez votre application pour utiliser des services autres que Google. Rédiger un seul extrait de code d'authentification qui fonctionne avec différents fournisseurs de services et leurs API me semble assez intéressant. Vous vous remercierez plus tard pour votre apprentissage du protocole.
OAuth Playground est un outil que j'ai créé pour aider les développeurs à résoudre leurs problèmes OAuth. Vous pouvez utiliser Playground pour résoudre les problèmes, vérifier votre implémentation ou tester les API Google Data.
Quelles sont ses fonctionnalités ?
- Illustre le flux d'authentification OAuth: récupérer un jeton de requête, autoriser ce jeton et le mettre à niveau en jeton d'accès.
- Affiche la chaîne de base de signature appropriée pour chaque requête.
- Affiche l'en-tête
Authorization
approprié pour chaque requête. - Montre comment utiliser une
oauth_token
pour interagir avec un flux de données Google authentifié. Vous pouvezGET
/POST
/PUT
/DELETE
données. - Affichez un flux authentifié directement dans votre navigateur.
- Permet de tester vos propres
oauth_consumer_key
(votre domaine enregistré) et votre clé privée. - Découvrez les services de flux de données Google disponibles pour votre
oauth_token
.
Démonstration de course à pied
Étape 1: Choisissez vos champs d'applicationChoisissez les API que vous souhaitez utiliser en choisissant une ou plusieurs portées. Dans cette démonstration, je demande un jeton qui fonctionnera avec Blogger et Google Contacts. Similarité à AuthSub |
|
Étape 2: Modifiez les paramètres et les paramètres OAuthPour l'instant, ne modifiez aucun paramètre dans la zone "Modifier les paramètres OAuth". Par la suite, vous pourrez tester votre propre clé privée en remplaçant Remarque : En plus de Différence avec AuthSub : |
|
Étape 3-5: Procurez-vous le jeton d'accèsL'obtention d'un jeton d'accès OAuth s'effectue en trois étapes. La première étape consiste à récupérer un jeton de requête. Cela permet à Google de savoir que votre application lance la danse OAuth. Tout d'abord, cliquez sur le bouton "Demander un jeton" dans la zone "Obtenir le jeton". Certains champs seront remplis avec des données.
|
|
Cliquez ensuite sur le bouton "Authorize" (Autoriser) dans la zone "Get the token" (Obtenir le jeton). Sur cette page d'autorisation, cliquez sur le bouton "Accorder l'accès" pour autoriser le jeton de requête et être redirigé vers OAuth Playground. Similarité à AuthSub : Différence avec AuthSub : Conseil: Spécifier une URL |
|
Enfin, cliquez sur le bouton "Jeton d'accès" dans la zone "Obtenir le jeton". Cette action met à niveau le jeton de requête autorisé (indiqué par le libellé rouge "jeton d'accès"). Si vous souhaitez récupérer un nouveau jeton, cliquez sur "Recommencer" pour relancer la danse OAuth. Maintenant, on peut faire quelque chose d'intéressant ! |
Utiliser le jeton d'accès
Vous êtes maintenant prêt à interroger des flux, insérer, mettre à jour ou supprimer des données. Faites attention lorsque vous utilisez ces trois dernières méthodes HTTP, car vous exploitez vos données réelles !
Conseil : Pour découvrir les flux disponibles pour votre jeton d'accès, cliquez sur le bouton "Flux disponibles".
Voici un exemple de requête : GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3
Cet exemple ne renvoie pas plus de trois articles par blog. Vous pouvez également afficher le flux ou l'entrée directement dans votre navigateur en cliquant sur le lien "Afficher dans le navigateur" sous la syntaxe en surbrillance.
Exemple: Mettre à jour un post
- Recherchez l'élément
<link>
avec un rel="edit" dans le post que vous souhaitez mettre à jour. Il devrait ressembler à ceci :<link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
Collez l'URL href dans le champ "Saisissez un flux de données Google".
- Copiez le code XML de l'entrée existante en cliquant sur "View Plain" (Afficher le texte brut) en haut du panneau de la syntaxe en surbrillance. Ne copiez que le corps de la réponse, et non les en-têtes.
- Dans la liste déroulante de la méthode HTTP, sélectionnez
PUT
. - Cliquez sur "Saisir les données de publication" sous ce menu déroulant, puis collez le code XML
<entry>
dans le pop-up. - Cliquez sur le bouton "exécuter".
Le serveur enverra une réponse 200 OK
.
Conseil : Au lieu de copier manuellement le lien edit
, décochez la case "Syntaxe syntaxique ?". Après une requête, vous pouvez cliquer sur les liens dans les corps de réponse XML.
Conclusion
Des technologies comme le protocole de publication AtomPub/Atom (protocole sous-jacent des API Google Data) et OAuth contribuent à faire avancer le Web. Alors que de plus en plus de sites commencent à adopter ces normes, les développeurs sont les gagnants. La création d'une application géniale devient soudainement plus intimidante.
Si vous avez des questions ou des commentaires concernant OAuth Playground, ou si vous utilisez OAuth avec les API Google, veuillez consulter le forum d'assistance consacré aux API G Suite et Marketplace.