web-dev-qa-db-fra.com

Comment authentifier l'utilisateur avec juste un compte Google sur Actions sur Google?

Actuellement, Google Assitant comprend un moyen simple pour demander des informations non identifiables sur l'utilisateur et un flux détaillé pour authentifier l'utilisateur sur un service tiers via OAuth2. Qu'en est-il si tout ce dont j'ai besoin est que l'utilisateur s'authentifie sur Google lui-même? J'ai essayé de remplir le flux de liaison de compte à l'aide des informations de Google OAuth2, mais cela ne semble pas fonctionner. Si cette dernière chose est censée fonctionner couramment, ce serait une réponse suffisante.

Contexte: les utilisateurs ne s'authentifient déjà qu'avec Google sur une page Web associée. Tout ce dont j'ai besoin est d'associer ce compte déjà authentifié au compte le moins authentifié de Google Assistant.

20
David Mulder

Après avoir contacté Google, la situation actuelle semble être que vous devez configurer votre propre serveur OAuth2, puis sur l'écran de connexion de votre serveur OAuth2, vous devez démarrer le flux Google OAuth2.

vous devez avoir votre propre point de terminaison avec Google Oauth2 - il est vrai que vous ne pouvez pas utiliser Google Oauth lui-même en tant que fournisseur. Pour utiliser Google OAuth service, vous pouvez utiliser un bouton "Se connecter avec Google" dans votre propre point de terminaison à la place.

Source: Contacter Google Actions sur l'assistance Google

Un peu sans voix en ce moment ... car cela semble être un énorme oubli de la part de Google.

4
David Mulder

Mise à jour du 25 octobre 2018:

Depuis le 13 septembre 2018, il existe désormais un moyen beaucoup plus simple d'accéder au compte de l'utilisateur si votre projet utilise Google Sign-In. Google Sign-In for Assistant vous donnera un jeton d'identification avec des informations sur l'utilisateur, y compris son identifiant Google, avec sa permission. Cette autorisation peut être accordée uniquement en utilisant la voix et est assez rationalisée.

Vous pouvez combiner cela avec une connexion Google basée sur le Web ou une application pour obtenir leur autorisation d'accès aux étendues OAuth si vous devez accéder aux API de Google.

Mise à jour du 25 octobre 2017:

Vers le 4 octobre ou le 7 octobre, Google a mis à jour sa politique (à nouveau) pour restaurer la langue limitant OAuth points de terminaison valides. Les termes incluent désormais

Lors de la mise en œuvre de la liaison de compte à l'aide d'OAuth, vous devez être propriétaire de votre point de terminaison OAuth

et il apparaît (à partir des commentaires ci-dessous) qu'ils vérifient maintenant les points de terminaison Google pour empêcher cette méthode de fonctionner.

À ce stade, la seule chose que vous pouvez faire est de configurer votre propre serveur OAuth2.

Message d'origine:

D'une manière générale, les tâches d'authentification que vous devez effectuer sont en quatre parties:

  1. Configurez votre projet (dans la console cloud) afin que l'API Calendar soit activée et que le client OAuth2 soit correctement configuré.
  2. Configurez l'action pour la liaison de compte dans la console d'action.
  3. Configurez les actions sur l'intégration Google pour votre agent API.AI pour indiquer qu'une connexion est requise.
  4. Lorsque API.AI appelle votre webhook pour réaliser une intention, il inclura un jeton d'authentification dans le cadre du JSON. Vous pouvez utiliser ce jeton pour appeler les API Google dont vous avez besoin.

Configurer Cloud Project

Vous devez configurer votre projet cloud afin qu'il ait accès aux API Google dont vous avez besoin et configurer l'ID client OAuth2, le secret et l'URI de redirection.

  1. Accédez à https://console.cloud.google.com/apis/dashboard et assurez-vous que le projet avec lequel vous travaillez est sélectionné. Assurez-vous ensuite que les API dont vous avez besoin sont activées.

  2. Sélectionnez le menu "Credentials" sur la gauche. Vous devriez voir quelque chose comme ceci:

Credentials screen

  1. Sélectionnez "Créer des informations d'identification" puis "ID client OAuth" Create credentials

  2. Sélectionnez qu'il s'agit d'une "application Web" (c'est ... un peu ...)

  3. Entrez un nom. Dans la capture d'écran ci-dessous, j'ai utilisé "Action client", donc je me souviens que c'est en fait pour Actions sur Google.

  4. Dans la section "URI de redirection autorisée", vous devez inclure un URI du formulaire https://oauth-redirect.googleusercontent.com/r/your-project-id En remplaçant la partie "your-project-id" par ... votre ID de projet dans la console Cloud. À ce stade, l'écran devrait ressembler à ceci: enter image description here

  5. Cliquez sur le bouton "Créer" et vous obtiendrez un écran avec votre ID client et votre secret. Vous pouvez en obtenir une copie maintenant, mais vous pouvez également les obtenir plus tard. enter image description here

  6. Cliquez sur "Ok" et vous serez ramené à l'écran "Credentials" avec le nouvel ID client ajouté. Vous pouvez cliquer sur l'icône en forme de crayon si vous avez besoin d'obtenir à nouveau l'ID et le secret (ou réinitialiser le secret s'il a été compromis).

enter image description here

Configurez l'Action Console

Une fois que nous avons OAuth configuré pour le projet, nous devons dire à Actions que c'est ce que nous allons utiliser pour authentifier et autoriser l'utilisateur.

  1. Accédez à https://console.actions.google.com/ et sélectionnez le projet avec lequel vous allez travailler.

  2. Dans la vue d'ensemble, parcourez toute configuration nécessaire jusqu'à ce que vous puissiez passer à l'étape 4, "Liaison de compte". Cela peut vous obliger à définir des noms et des icônes - vous pouvez revenir plus tard si nécessaire pour les corriger.

enter image description here

  1. Sélectionnez le type de subvention du "Code d'autorisation" et cliquez sur Suivant.

enter image description here

  1. Dans la section Informations sur le client, entrez l'ID client et le secret client à partir du moment où vous avez créé les informations d'identification dans la console cloud. (Si vous oubliez, accédez à la section Informations d'identification de l'API Cloud Console et cliquez sur le crayon.)

  2. Pour l'URL d'autorisation, entrez https://accounts.google.com/o/oauth2/v2/auth

  3. Pour l'URL du jeton, entrez https://www.googleapis.com/oauth2/v4/token

  4. Cliquez sur Suivant

enter image description here

  1. Vous configurez maintenant votre client pour les étendues que vous demandez. Contrairement à la plupart des autres endroits, vous entrez des étendues - vous devez en avoir un par ligne. Cliquez ensuite sur Suivant.

enter image description here

  1. Vous devez saisir les instructions de test. Avant de soumettre votre action, ces instructions doivent contenir un compte de test et un mot de passe que l'équipe d'évaluation peut utiliser pour l'évaluer. Mais vous pouvez simplement y mettre quelque chose pendant que vous testez, puis appuyer sur le bouton Enregistrer.

Configurer API.AI

Dans API.AI, vous devez indiquer que l'utilisateur doit se connecter pour utiliser l'action.

  1. Accédez à https://console.api.ai/ et sélectionnez le projet avec lequel vous travaillez.

  2. Sélectionnez "Intégrations" puis "Actions sur Google". Allumez-le si vous ne l'avez pas déjà fait.

  3. Cochez la case "Connexion requise pour une intention de bienvenue".

enter image description here

Gérez les choses dans votre webhook

Après toute cette configuration, la gestion des choses dans votre webhook est assez simple! Vous pouvez obtenir un OAuth jeton d'accès de deux manières:

  • Si vous utilisez la bibliothèque JavaScript, appelez app.getUser().authToken

  • Si vous regardez le corps JSON, il est dans originalRequest.data.user.accessToken

Vous utiliserez ce jeton d'accès pour effectuer des appels contre les points de terminaison de l'API de Google à l'aide de méthodes définies ailleurs.

Vous n'avez pas besoin d'un jeton d'actualisation - l'assistant doit vous remettre un jeton d'accès valide, sauf si l'utilisateur a révoqué l'accès.

41
Prisoner

Je suis capable de le faire fonctionner après une longue période. Nous devons d'abord activer le webhook et nous pouvons voir comment l'activer dans les documents d'exécution du flux de dialogue.Si nous allons utiliser Google Assistant, nous devons d'abord activer l'intégration de Google Assistant dans les intégrations. Suivez ensuite les étapes mentionnées ci-dessous pour la liaison de compte dans les actions sur Google: -

  1. Accédez à la console Google Cloud -> API et services -> Informations d'identification -> OAuth 2.0 ID client -> Client Web -> Notez l'ID client, le secret client à partir de là -> Téléchargez JSON - à partir de json note dans l'ID du projet, auth_uri, token_uri -> URI de redirection autorisés -> La liste blanche de l'URL de notre application -> dans cette partie fixe d'URL est https://oauth-redirect.googleusercontent.com/r/ et ajouter l'ID du projet dans l'URL -> Enregistrer les modifications

  2. Actions sur Google -> Configuration de la liaison de compte 1. Type de subvention = Code d'autorisation 2. Informations sur le client 1. Remplissez l'ID client, le client secrtet, auth_uri, token_uri 2. Entrez l'URH d'authentification comme https: //www.googleapis .com/auth et token_uri as https://www.googleapis.com/token 3. Enregistrez et exécutez 4. Il affichera une erreur lors de l'exécution sur l'assistant google, mais ne vous inquiétez pas 5. Revenez à la section de liaison de compte dans les paramètres de l'assistant et entrez auth_uri comme https://accounts.google.com/o/oauth2/auth et token_uri comme https: // accounts.google.com/o/oauth2/token 6. Mettez les étendues sous la forme https://www.googleapis.com/auth/userinfo.profile et https://www.googleapis.com/auth/userinfo.email et nous sommes prêts à partir. 7. Enregistrez les modifications.

  3. Dans les journaux du serveur d'hébergement, nous pouvons voir la valeur du jeton d'accès et via le jeton d'accès, nous pouvons obtenir les détails concernant l'adresse e-mail.

  4. Ajoutez le jeton d'accès à ce lien " https://www.googleapis.com/oauth2/v1/userinfo?access_token= " et nous pourrons obtenir les détails requis dans la page json résultante.
  5. accessToken = req.get("originalRequest").get("data").get("user").get("accessToken")
    r = requests.get(link) print("Email Id= " + r.json()["email"]) print("Name= " + r.json()["name"])
2
Jatin

Vous devez implémenter le protocole Oauth avec l'application Google Assistant que vous développez. Permettez-moi d'être un peu plus clair:

  1. L'utilisateur est sur l'assistant, vous devez le lier à toutes les données que vous avez sur votre application
  2. L'accès aux données dont vous disposez sur votre utilisateur est protégé par un jeton d'accès
  3. Google doit ensuite vous demander ce jeton pour avoir accès à cette ressource
  4. Lorsque Google possède le jeton, il peut l'envoyer à l'application afin qu'il valide toutes les demandes d'obtention de la ressource.

C'est pourquoi vous devez implémenter votre propre oauth serveur (Honnêtement, ce ne sont que deux autres points de terminaison dans votre application): l'identité est vérifiée du côté de google, mais le lien entre l'utilisateur et la ressource l'accès est uniquement connu de vous. Le processus ci-dessus est valide, il vous suffit de spécifier votre propre point de terminaison de jeton et votre propre point de terminaison d'authentification. Notez que si vous souhaitez uniquement vérifier que l'utilisateur est connecté à Google et recevoir son e-mail , il vous suffit d'implémenter le flux d'identité rationalisé qui ne nécessite pas le point de terminaison/auth ( Inscription automatique des utilisateurs avec des flux d'identité rationalisés )

Cela étant dit, j'ai implémenté le flux mais obtenez la même erreur: expected_inputs[0].possible_intents[0]: Transactions/Identity API must be enabled before using.

1
Antoine Laurent