OAuth, PHP et les appli mobiles

Je me suis récemment penché sur OAuth, et plus précisément sur la librairie oauth-php. Les exemples (client et serveur) sont plutôt clair et fonctionne, malheureusement, la partie utilisation avec un client embarqué est moins détaillé.

Petit retour d’expérience…

 
OAuth ca sert à quoi ?

C’est simplement une méthode standard permettant de sécuriser les accès à vos API. Prenons un exemple que vous utilisez surement au quotidien, Twitter. Twitter utilise OAuth pour permettre à ses utilisateurs d’accéder à leurs comptes en utilisant d’autres applications que la leur (autres site web, appli mobiles, etc).

 
Le serveur, je fait comment ?

Le serveur de base n’a besoin que des quelques fonctionnalités suivantes :

  • Enregistrer les applications, c’est un simple formulaire qui permet aux applications de s’enregistrer, et de récupérer les « consumer key and secret » à utiliser pour ensuite communiquer avec le serveur.
  • Distribuer des jetons d’autorisations, le jeton d’autorisation est utilisé pour permettre à l’utilisateur d’autoriser ou non l’application à accéder à ses données.
  • Demander aux utilisateurs de confirmer, cette action affiche un formulaire d’authentification que vos utilisateurs utilisent pour s’identifier et autoriser l’application à accéder à leurs comptes.
  • Transformer le jeton d’autorisation en jeton d’accès.
  • Et bien évidement, sécuriser les accès de vos API publiques et vérifier que les requêtes soient signées.

Le client web, comment il utilise le serveur ?

Au niveau du client, pas grand chose non plus :

  • Récupérer un jeton d’autorisation
  • Rediriger l’utilisateur sur le serveur OAuth pour qu’il confirme l’authorisation. A cette étape l’utilisateur doit saisir ses login / mot de passe sur le serveur OAuth pour s’identifier et autoriser l’accès.
  • Une fois confirmé le serveur renvoie l’utilisateur sur votre url de « callback », il vous reste juste à tranformer le jeton d’autorisation en jeton d’accès.
  • Vous pouvez maintenant signer vos requêtes pour accéder aux informations protégés de l’utilisateur.

Et le client mobile dans tout ça ?

Pour le client mobile il est plus difficile de gérer la confirmation d’autorisation par l’utilisateur sur le serveur OAuth. La multitudes d’écran de différentes tailles, les différents OS, mais surtout l’url de callback, font qu’il est bien plus simple de demander à l’utilisateur de se logguer directement sur l’appli mobile.

La différence entre le web et le mobile tiens donc en 2 points :

  • Remplacer l’url de callback lors de l’appel au controlleur d’autorisation du serveur par oob (Out Of Band), le serveur au lieu de rediriger sur une url affichera un résultat.
  • Ne pas simplement rediriger l’utilisateur sur le controlleur d’autorisation, mais afficher un formulaire de login et faire un requête en post au controlleur d’authorisation. Celui ci n’affichera pas le form mais traitera le POST, puis affichera de quoi convertir le jeton d’authorisation en jeton d’accès.
  • Récupérer ensuite le jeton d’accès.

About the Author: Guillaume Luchet

Guillaume Luchet est Directeur de la R&D et Lead Développeur chez Bilendi Technology, entrepreneur et développeur freelance.