Google Assistant : Actions SDK – Account Linking

Nous avons déjà vu comment retenir l’intégralité d’une conversation Google Assistant dans l’article dialogue avec Actions SDK. Dans cet article, nous allons voir comment nous authentifier à un service tiers via Google Assistant en utilisant le flux OAuth 2.

Le projet Google Assistant que nous allons développer

Le projet que nous allons développer dans cet article est assez simple. Il s’agira de s’authentifier à son compte GitHub afin de récupérer notre nom d’utilisateur et le nombre de dépôts publics que nous avons via Google Assistant.

OAuth 2

Notre projet s’applique à GitHub car il a vocation de tutorial et il n’est donc pas pertinent de développer toute une mécanique d’authentification OAuth 2, ceci n’étant pas le sujet de cet article. Toutefois, si vous souhaitez appliquer les principes de ce tutoriel à votre service, il vous faudra implémenter un flux OAuth 2 sur votre site.

Création du projet sur Firebase

La première chose que nous allons faire va être de créer le projet sur Firebase. Nous allons donc créer un projet que j’ai appelé WhoAmI. Firebase m’a assigné l’identifiant de projet whoami-59046.

Création d’une application sur GitHub

Rendez-vous dans les paramètres de votre compte sur GitHub.

GitHub : Paramètres de compte

Ensuite, dans le menu de gauche, dans la section Developer Settings, cliquez sur l’entrée OAuth Apps.

Cliquez ensuite sur le bouton Register a new application.

Choisissez un nom pour votre application (WhoAmIHome), une url pour la page d’accueil (https://www.gahfy.net), et optionnellement une description (que j’ai laissée vide).

Pour l’authorization callback url, vous devez choisir comme url : https://oauth-redirect.googleusercontent.com/r/[project-id] (dans mon cas : https://oauth-redirect.googleusercontent.com/r/whoami-59046).

Cliquez sur le bouton vert Register Application, pour arriver sur la page de synthèse de votre application.

GitHub : Application OAuth

Retenez bien le Client Id et le Client Secret de votre application. Attention : Veillez bien à ne jamais partager le client secret de votre application !

Nous en avons désormais terminé avec GitHub.

Script Actions SDK

Nous allons maintenant passer au script Actions SDK. Initialisez un nouveau script Google Actions :

Puis, nous allons remplir notre script action.json comme nous l’avons fait pour toutes les applications développées jusqu’ici :

Fulfillment version

L’account Linking n’est apparu que dans la version 2 du format Action Package. Il va donc falloir indiquer que c’est cette seconde version que nous souhaitons utiliser :

Paramètre signInRequired

Le paramètre signInRequired d’une action indique si l’authentification est requise pour cette action ou non. Nous allons donc devoir spécifier que l’authentification est requise pour notre action MAIN.

Ce qui nous donne le script suivant pour action.json dans son intégralité :

Il ne vous reste plus qu’à publier votre script Google Assistant via gactions.

Script Node.js

Nous allons commencer par initialiser les fonctions Firebase et installer les dépendances requises (Librairie Google Assistant) :

Après avoir ajouté notre intent MAIN, notre fichier index.js ressemble à ceci :

Méthode askForSignin()

Dans notre méthode mainIntent, nous allons demander à l’utilisateur de s’authentifier sur GitHub. Pour se faire, nous allons utiliser la méthode ActionsSdkApp.askForSignIn().

Notre méthode mainIntent() devient donc :

Intent SIGN_IN

Nous allons désormais ajouter le mapping avec l’Intent de retour de l’authentification. Il s’agit de l’Intent standard ActionsSdkApp.StandardIntents.SIGN_IN.

Vérification de l’authentification et récupération du jeton d’accès

Maintenant, dans la méthode signInIntent, nous allons vérifier si l’utilisateur s’est bien authentifié. Pour se faire, nous allons utiliser la méthode ActionsSdkApp.getSignInStatus() qui renvoie la valeur ActionsSdkApp.SignInStatus.OK en cas de succès.

Une fois cette vérification effectuée, nous pourrons récupérer le jeton d’accès OAuth à l’aide de la propriété ActionsSdkApp.getUser().accessToken.

Finalisation du script

Il ne nous reste plus qu’à compléter l’accès à l’API GitHub pour récupérer les données que nous souhaitons :

Configuration sur la console Actions on Google

Vous aurez pu remarquer que jusqu’ici, nous n’avons pas encore relié notre application au flux OAuth de notre application GitHub. Cette étape se fait via la configuration de l’application sur la console Actions on Google.

Dans la partie Overview, vous devez remplir toutes les données liées à votre application pour pouvoir accéder à la partie Account Linking :

Actions onGoogle : Account Linking

Une fois dans cette partie, il vous suffira de remplir les données liées à votre application et au flux OAuth de votre fournisseur en cliquant sur le bouton Edit. Concernant GitHub :

  • Authorization URL : https://github.com/login/oauth/authorize
  • Token URL : https://github.com/login/oauth/access_token

Actions on Google : Account Linking Details

Test de l’application Google Assistant

Voilà, il ne vous reste plus qu’à tester votre application via le simulateur. Lorsque vous invoquez votre application, le simulateur vous répondra que votre compte n’est pas encore lié. Pour le lier, vous devrez vous rendre à l’url disponible dans la partie debugInfo de l’onglet Debug.

Actions on Google : Link account in Google Assistant simulator

Une fois que vous vous rendrez à cette URL, vous arriverez sur le formulaire d’autorisation de GitHub :

GitHub : Authorize App

Une fois que vous aurez autorisé l’application, vous pouvez retourner dans le simulateur et à nouveau invoquer votre application (pas besoin de faire quoi que ce soit du token affiché après l’autorisation, vous pouvez fermer directement l’onglet) :

Simulateur Google Assistant : compte lié

Conclusion

Voilà, vous savez désormais lier un compte d’un service tiers (qui peut être le vôtre) à une application Google Assistant. En espérant que ça vous ait été utile.

Twitter
Vous avez aimé cet article ? N’hésitez pas à me suivre sur Twitter pour être informé des prochains.
Développeur Android freelance depuis Avril 2016, je partage sur mon blog aussi bien que dans des meetups.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *