Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe

Utiliser OAuth 1 avec Postman

Poster un commentaire

Je travaille sur un projet où un script doit périodiquement récupérer sur Tumblr un nombre de followers.

 

Avant de récupérer ce type de données je me suis plongé dans le doc pour découvrir qu’il existe bien une Api:

https://www.tumblr.com/docs/en/api/v2#blog-followers

Mais il faut faire une authentification OAuth:

2016-12-13_11-01-23

La doc se limite à ceci:

https://www.tumblr.com/docs/en/api/v2#auth

 

Les différents packages out-of the box que j’ai pu trouvé ne marchent pas/plus/mal, il faut donc envisager une implémentation à la main.

La doc nous apprend qu’il s’agit de OAuth 1.0. En l’absence de plus de précisions, on va supposer que la RTF est correctement respectée. Je conseille donc vivement d’aller lire la RTF (on trouvera le lien en bibliographie). Elle est vraiment très lisible.

Avant de coder quoi que ce soit c’est pas mal de prototyper et Postman est un bon outil pour cela.

xAuth

Mon appli est une appli de type console. Le problème est que OAuth n’est pas super adapté à ce contexte comme on le découvrira plus loin. Il y a en particulier la gestion de l’url de callback.

En faisant des recherches je suis tombé sur un protocole appelé xAuth qui a l’avantage de court-circuiter la partie un peu pénible. Et super Tumblr gère ce protocole… enfin le gérait car ce n’est apparemment plus le cas aujourd’hui!

 

Même s’ils n’en sont pas l’inventeur, c’est Twitter qui a rendu populaire ce protocole. Voici donc une petite doc:

https://dev.twitter.com/oauth/xauth

 

OAuth

Dans les grandes lignes

Première chose à comprendre: OAuth est un protocole de délégation.

L’idée est que mon appli tierce va devoir se connecter à la ressource qui m’intéresse (le blob Tumblr) avec l’autorisation du propriétaire.

Le propriétaire ne veux évidemment pas diffuser ses logins et encore moins passer sa vie à gérer des demandes de création de compte. OAuth permet d’automatiser cela grâce à la délégation: mon appli va demander au propriétaire (du blog) de se connecter à Tumblr et ensuite dire à Tumblr: c’est bon, je peux entrer, le taulier est d’accord pour que je me serve de sa session.

Remarquez bien que l’on ne parle pas d’impersonnalisation. L’appli doit se déclarer et montrer patte blanche pour pouvoir utiliser la connexion fournie par le gentil propriétaire.

 

Bon c’est pas rédigé comme ça dans la spec OAuth, mais vous voyez l’idée.

Le cycle complet de l’authentification comprend 3 étapes:

  1. Récupérer un request token (RT)
  2. récupérer un code (le verifier)
  3. Echanger le RT et le verifier par un access token qui lui me permettra d’accéder aux ressources Tumblr qui m’intéressent

 

La documentation doit vous donner les points de terminaisons dont on aura besoin:

2016-12-13_11-19-13

Le request token (RT) est utilisé par le Consumer (mon appli) pour demander au User (le proprio) l’autorisation d’accéder à une ressource protégée. Il sera ensuite échangé contre un access token. Le RT ne peut servir qu’une fois et a une durée de vie limitée (1 heure pour Tumblr).

L’access token est utilisé par le Consumer pour accéder à une ressource au nom du User. Il peut être associé à des permissions particulières et peut aussi être révoqué.

Enregistrer son application

Pour se connecter votre application devra être connue de Tumblr. Pour cela elle va recevoir un identifiant et un secret qu’il faudra conserver à l’abris des regards. On enregistre une application en se rendant sur cette page après s’être connecté:

https://www.tumblr.com/oauth/apps

On repère un gros bouton vert marqué Register application. Un formulaire s’ouvre et on renseigne à minima:

  • Application Name
  • Application Description
  • Application WebSite
  • Administrative contact email
  • Default Callback Url

Le rôle de ces champ est en général assez clair, mais revenons sur deux d’entre eux:

Application WebSite est soit l’url du site si votre application est un site Web ou bien une chaîne quelconque au format url. J’ai saisit:

http://www.test.com

 

Pour l’instant on ne va pas trop s’occuper de Callback Url et on va mettre http://google.fr par exemple. On le modifiera plus tard.

Quelque chose comme ceci s’affiche:

2016-12-13_22-48-46

 

Obtenir le request token

Nous avons besoin de deux paramètres:

  1. Consumer key
  2. Consumer secret

C’est paramètre nous sont fournis lorsque l’on enregistre l’application auprès de Tumblr. Regardez la copie d’écran:

2016-12-13_22-48-46

On voit la valeur de Consumer Key. Il faut cliquer sur « Show Secret key » pour voir Consumer Secret. On note ces deux valeurs.

Dans la terminologie OAuth, Consumer désigne ce que j’ai appelé l’appli cliente

 

On lance ensuite Postman avec lequel on va lancer la requête:

POST https://www.tumblr.com/oauth/request_token

On va s’intéresser à l’onglet suivant:

2016-12-13_22-54-55

Je sélectionne OAuth:

2016-12-13_22-56-11

On renseigne bien entendu les deux champs Consumer key et Secret. Postman se chargera de créer le jeton avec la signature qui va bien, c’est bien pratique.

Auparavant je coche l’option Auto Add Parameter et je clique sur SEND.

2016-12-13_22-59-32

La première étape est terminée, on en profite pour recopier les valeurs key et secret du request token obtenu.

Obtenir le verifier

Il s’agit d’un code associé au RT. On l’obtient avec l’url:

GET https://www.tumblr.com/oauth/authorize

 

La syntaxe est la suivante:

https://www.tumblr.com/oauth/authorize?oauth_token=2iuEjj2JvhlvrofV4yjqheo5jiECEx7W…

 

Note: Cette étape devra être faite depuis un navigateur, pas Postman.

 

Le paramètre passé est la clef du request token. La requête nous amène ici:

2016-12-13_23-04-22

On confirme en faisant Allow, nous sommes redirigé ici:

https://www.google.fr/?oauth_token=2iuEjj2JvhlvrofV4yjqheo5jiECEx7WFH8JZAXlOXzbLSxmrP&oauth_verifier=RcQFc9IZ1ofCUJCAz51iQQ9wDrcD2Su7PrHgCM0J&gws_rd=ssl#_=_

 

Regardez la chaîne de requête. On a un rappel du RT, mais surtout oauth_verifier qui est le verifier que l’on note:

RcQFc9IZ1ofCUJCAz51iQQ9wDrcD2Su7PrHgPPISZpCM0J&gws_rd=ssl

 

 

Note: Le RT et donc le verifier, ne sont valables qu’une heure. Il est donc peut intéressant de le conserver.

 

On note aussi quelque chose de très intéressant: nous avons été redirigé vers le callback. Pour l’instant c’est Google, mais cela pourrait être un web site qui enregistre le verifier et procède automatiquement à l’obtention de l’access token.

Ce scénario est justement celui qui va m’intéresser dans mon cas.

Obtenir l’access token

On a besoin du RT et du verifier et de Postman.

L’url est:

POST https://www.tumblr.com/oauth/access_token

On clique sur l’onglet OAuth et on renseigne tous les champs:

2016-12-13_23-19-50

On remarque que l’on ne peut pas saisir verifier, on devra le faire autrement:

2016-12-13_23-21-14

 

On clique sur SEND et l’access token est renvoyé. C’est lui que l’on fournira à notre api de followers.

Dans mon cas j’enregistre l’access token pour ne pas avoir à renouveler l’opération d’authentification.

Obtenir les followers

Toujours Postman. On va dans l’onglet OAuth et on renseigne la même chose que précédemment. Mais Token contient l’access token cette fois.

2016-12-13_23-28-54

Bibliographie

 Un intéressant diagramme dans cette discussion:
Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s