Le type Association OAuth est compatible avec deux flux OAuth 2.0 standards dans le secteur : le flux implicite et le flux avec code d'autorisation.
在隐式代码流程中,Google 会在用户浏览器中打开您的授权端点。成功登录后,系统会向 Google 返回长期访问令牌。现在,从 Google 助理向你的 Action 发送的每个请求中都包含此访问令牌。
在授权代码流程中,您需要两个端点:
- 授权端点,该端点负责向尚未登录的用户显示登录界面,并以短期授权代码的形式记录所请求的访问。
- 令牌交换端点,负责两种类型的交换:
- 将授权代码交换为长期刷新令牌和短期访问令牌。用户完成帐号关联流程后,系统会进行这种交换。
- 将长期刷新令牌换成短期访问令牌。Google 需要新访问令牌时,由于此令牌已过期,因此会进行此交换。
虽然隐式代码流程的实现更简单,但 Google 建议通过隐式流程发出的访问令牌永远不会过期,因为将令牌过期与隐式流程一起使用会强制用户再次关联其帐号。如果出于安全考虑需要令牌到期,强烈建议您考虑使用身份验证代码流程。
Implémenter l'association de comptes OAuth
Configurer le projet
Pour configurer votre projet afin qu'il utilise l'association OAuth, procédez comme suit :
- Ouvrez la console Actions et sélectionnez le projet que vous souhaitez utiliser.
- Cliquez sur l'onglet Develop (Développer), puis sélectionnez Account linking (Association de comptes).
- Activez le bouton à côté de Association de compte.
- Dans la section Création de compte, sélectionnez Non, je ne veux autoriser la création de compte que sur mon site Web.
Dans Type d'association, sélectionnez OAuth et Implicite.
Dans Informations sur le client :
- Attribuez une valeur à ID client émis par vos Actions sur Google pour identifier les requêtes provenant de Google.
- Insérez les URL de vos points de terminaison d'autorisation et d'échange de jetons.
- Cliquez sur Enregistrer.
Implémenter votre serveur OAuth
Pour prendre en charge le flux implicite OAuth 2.0, votre service accorde une autorisation un point de terminaison unique disponible via HTTPS. Ce point de terminaison est responsable de l’authentification et l'obtention du consentement des utilisateurs pour l'accès aux données. Le point de terminaison d'autorisation présente une interface utilisateur de connexion aux utilisateurs qui ne sont pas déjà connectés et enregistre autoriser l'accès demandé.
Lorsque votre action doit appeler l'une des API autorisées de votre service, Google utilise ce point de terminaison pour obtenir l'autorisation de vos utilisateurs d'appeler ces API au nom de l'utilisateur.
Une session de flux implicite OAuth 2.0 typique lancée par Google possède le flux suivant:
- Google ouvre votre point de terminaison d'autorisation dans le navigateur de l'utilisateur. La l'utilisateur se connecte s'il n'est pas déjà connecté et autorise Google à y accéder leurs données avec votre API s'ils ne l'ont pas déjà accordé.
- Votre service crée un jeton d'accès et le renvoie à Google en redirigeant le navigateur de l'utilisateur vers Google à l'aide du jeton d'accès joint à la demande.
- Google appelle les API de votre service et associe le jeton d'accès chaque requête. Votre service vérifie que le jeton d'accès accorde à Google l'autorisation d'accès à l'API, puis termine l'appel d'API.
Gérer les requêtes d'autorisation
Lorsque votre action doit associer des comptes via un flux implicite OAuth 2.0, Google renvoie l'utilisateur vers votre point de terminaison d'autorisation avec une requête qui inclut les paramètres suivants:
Paramètres du point de terminaison de l'autorisation | |
---|---|
client_id |
ID client que vous avez attribué à Google. |
redirect_uri |
URL à laquelle vous envoyez la réponse à cette requête. |
state |
Une valeur de tenue de registre renvoyée à Google telle quelle dans le l'URI de redirection. |
response_type |
Type de valeur à renvoyer dans la réponse. Pour l'authentification OAuth 2.0
le type de réponse est toujours token . |
Par exemple, si votre point de terminaison d'autorisation est disponible à l'adresse https://myservice.example.com/auth
,
une requête peut se présenter comme suit:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token
Pour que votre point de terminaison d'autorisation traite les requêtes de connexion, procédez comme suit:
Vérifiez les valeurs
client_id
etredirect_uri
pour pour empêcher l'octroi d'accès à des applications clientes non intentionnelles ou mal configurées:- Vérifiez que
client_id
correspond à l'ID client que vous attribué à Google. - Vérifiez que l'URL spécifiée par
redirect_uri
a la forme suivante: YOUR_PROJECT_ID est l'ID indiqué sur la page Paramètres du projet. de la console Actions.https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
- Vérifiez que
Vérifiez si l'utilisateur est connecté à votre service. Si l'utilisateur n'est pas signé suivez la procédure de connexion ou d'inscription de votre service.
Générez un jeton d'accès que Google utilisera pour accéder à votre API. La Le jeton d'accès peut correspondre à n'importe quelle valeur de chaîne, mais il doit représenter de manière unique le user et le client pour lequel le jeton est destiné et ne doit pas être devinable.
Envoyer une réponse HTTP qui redirige le navigateur de l'utilisateur vers l'URL spécifiée par le paramètre
redirect_uri
. Incluez tous les les paramètres suivants dans le fragment d'URL:access_token
: jeton d'accès que vous venez de générertoken_type
: chaînebearer
state
: valeur de l'état non modifié de l'original demander Voici un exemple de l'URL obtenue:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
Le gestionnaire de redirection OAuth 2.0 de Google recevra le jeton d'accès et confirmera
que la valeur state
n'a pas changé. Une fois que Google a obtenu
pour votre service, Google l'associe aux appels suivants
à votre action dans le cadre de AppRequest.
Concevoir l'interface utilisateur vocale pour le flux d'authentification
Vérifiez si l'utilisateur est validé et lancez le processus d'association de compte.
- Ouvrez votre projet Actions Builder dans la console Actions.
- Créez une scène pour lancer l'association de compte dans votre action :
- Cliquez sur Scènes.
- Cliquez sur l'icône Ajouter (+) pour ajouter une scène.
- Dans la scène que vous venez de créer, cliquez sur l'icône Ajouter add pour Conditions.
- Ajoutez une condition qui vérifie si l'utilisateur associé à la conversation est un utilisateur validé. Si la vérification échoue, votre action ne peut pas associer de compte pendant la conversation et doit revenir à l'accès aux fonctionnalités qui ne nécessitent pas d'association de compte.
- Dans le champ
Enter new expression
sous Condition, saisissez la logique suivante :user.verificationStatus != "VERIFIED"
- Sous Transition, sélectionnez une scène qui ne nécessite pas d'association de compte ou une scène qui constitue le point d'entrée de la fonctionnalité réservée aux invités.
- Dans le champ
- Cliquez sur l'icône Ajouter add pour Conditions.
- Ajoutez une condition pour déclencher un parcours d'association de compte si l'utilisateur n'a pas d'identité associée.
- Dans le champ
Enter new expression
sous Condition, saisissez la logique suivante :user.verificationStatus == "VERIFIED"
- Sous Transition, sélectionnez la scène système Association de compte.
- Cliquez sur Enregistrer.
- Dans le champ
Une fois l'enregistrement effectué, une scène de système d'association de compte appelée <SceneName>_AccountLinking
est ajoutée à votre projet.
Personnaliser la scène d'association de comptes
- Sous Scènes, sélectionnez la scène du système d'association de comptes.
- Cliquez sur Envoyer le prompt et ajoutez une brève phrase pour expliquer à l'utilisateur pourquoi l'action doit accéder à son identité (par exemple, "Pour enregistrer vos préférences").
- Cliquez sur Enregistrer.
- Sous Conditions, cliquez sur Si l'utilisateur associe son compte.
- Configurez la façon dont le flux doit se dérouler si l'utilisateur accepte d'associer son compte. Par exemple, appelez le webhook pour traiter toute logique métier personnalisée requise et revenez à la scène d'origine.
- Cliquez sur Enregistrer.
- Sous Conditions, cliquez sur Si l'utilisateur annule ou ignore l'association de compte.
- Configurez la façon dont le flux doit se dérouler si l'utilisateur n'accepte pas d'associer son compte. Par exemple, envoyez un message de confirmation et redirigez l'utilisateur vers des scènes qui fournissent des fonctionnalités ne nécessitant pas l'association de comptes.
- Cliquez sur Enregistrer.
- Sous Conditions, cliquez sur En cas d'erreur système ou réseau.
- Configurez la façon dont le flux doit se dérouler si le flux d'association de compte ne peut pas être terminé en raison d'erreurs système ou réseau. Par exemple, envoyez un message de confirmation et redirigez l'utilisateur vers des scènes qui fournissent des fonctionnalités ne nécessitant pas l'association de comptes.
- Cliquez sur Enregistrer.
Gérer les demandes d'accès aux données
Si la requête de l'Assistant contient un jeton d'accès, vérifiez d'abord que le jeton d'accès est valide (et non expiré), puis récupérez le compte utilisateur associé à partir de votre base de données.