【问题标题】:Google Assistant Account linking - Authentication with backendsGoogle 助理帐户关联 - 使用后端进行身份验证
【发布时间】:2020-11-13 05:36:51
【问题描述】:

我是 Moodle 管理员,我想连接 Dialogflow 聊天机器人 – Google Assistant – Moodle 站点(Moodle 站点 = 后端服务器 = mysite)。 当 Dialogflow 意图通过 webhook 从 Moodle 请求私人用户数据时,该意图需要登录,并且必须在服务器上识别用户。我想使用基于 OAuth 的 Google 登录链接概念。

实施的服务:

  1. Dialogflow 和 Moodle 通过 webhook 连接。 Fulfillment – Webhook URL:mysite/client.php。 client.php 文件位于 Moodle 服务器(后端服务器)上。 Intent 使用 webhook,Moodle 以 JSON 格式发送答案。

  2. Google Oauth 2 客户端已创建。 URI:我的网站 授权的重定向 URI mysite/callback.php(适用于 PHP 的 Google API 客户端库 - 需要登录) oauth-redirect.googleusercontent.com/r/DialogflowBotID(DialogflowBot 需要) mysite/moodle37/admin/oauth2callback.php(Moodle 需要)

  3. Google Oauth 2 和 Moodle 已连接 (https://docs.moodle.org/39/en/OAuth_2_Google_service)。 在 Moodle 中设置了 OAuth2 Google Cloud 服务,使用户可以使用 Google 帐户登录 Moodle。首先,在聊天之前,用户登录:Google 对用户进行身份验证,将用户数据发送到 Moodle,Moodle 将用户的 gmail 地址存储在“mdl_auth_oauth2_linked_login”mysql 表中。用 Google 术语来说:用户的信息存在于后端服务器中。

  4. Dialogflow 和 Google 助理通过帐户链接 (developers.google.com/assistant/identity/google-sign-in-oauth) 连接。 链接类型:OAuth 和 Google 登录 - 隐式 授权网址:mysite/login.php 令牌网址:oauth2.googleapis.com/token 谷歌 OAuth 客户端 您的 Actions 向 Google 发布的客户 ID 帮助大纲:169222114038 ... 客户机密:RPF ... Google 向您的操作帮助大纲颁发的客户端 ID:169222114038 ... 范围:个人资料、电子邮件 [ x] Google 通过 HTTP 基本身份验证标头传输 clientID 和 secret

intent 调用 Google 登录窗口,用户登录,重定向 URI:oauth-redirect.googleusercontent.com/r/DialogflowBotID (在您可以使用聊天之前,我需要将您的聊天帐户与 Google 相关联。可以吗?太好了,Tamás!您的学习聊天帐户现已与 Google 相关联。)

  1. Google 网站登录 - 使用后端服务器进行身份验证 (developers.google.com/identity/sign-in/web/backend-auth) Google API 客户端库 (github.com/googleapis/google-api-php-client) 安装在 Moodle 服务器上。 login.php 和 callback.php 文件与 client.php 位于同一目录中。 mysite/login.php 调用 Google 登录窗口 (accounts.google.com/signin/oauth ...) 并将被重定向到 mysite/callback.php callback.php 处理 OAuth 服务器响应验证令牌并包含: 用户数据、电子邮件地址(与 Moodle 中的电子邮件地址相同) 访问令牌:ya29.a0 ... refresh_token = 1//09M8- ... id_token = eyJhbGciOi ... callback.php 从后端服务器数据库中选择用户电子邮件地址,如果(存储的后端电子邮件 = = 收到的令牌电子邮件)为用户建立经过身份验证的会话。

callback.php 文件将被重定向到 DialogflowBot:

$redirect_url = 'https://oauth-redirect.googleusercontent.com/r/DialogflowBotID#access_token=' . $access_token . '&token_type=bearer&state=' . $STATE_STRING;
header('Location: ' . filter_var($redirect_url, FILTER_SANITIZE_URL));

Actions Console – 在模拟器中测试:在您可以使用学习聊天之前,我需要将您的学习聊天帐户链接到 Google。这样可以吗?是的 链接:太好了,塔玛斯!您的学习聊天帐户现已与 Google 相关联。

1 2 3 4 5 服务分开工作。

我的问题是:

  1. developers.google.com/assistant/identity/oauth-concept-guide 说:用户登录并验证凭据后, 您的服务会创建一个长期存在的访问令牌并将其返回给 Google。 如何在后端服务器上创建长期访问令牌?

  2. 用户验证后,如何将 callback.php 重定向到 Dialogflow 机器人? 我用这个:

    $redirect_url = 'https://oauth-redirect.googleusercontent.com/r/DialogflowBotID#access_token='。 $access_token 。 '&token_type=bearer&state=' 。 $STATE_STRING; header('位置:' .filter_var($redirect_url, FILTER_SANITIZE_URL));

这样合适吗?

  1. client.php 提供 JSON webhook 响应,但不包含令牌和状态。 callback.php 包含令牌和状态,但无法应答 webhook。 如何连接client.php、login.php、callback.php文件?

  2. 我尝试注销用户并取消关联帐户。

    未设置($_SESSION["auto"]); 未设置($_SESSION['accesToken']); $client->revokeToken(accessToken); $client->revokeToken();

用户如何取消关联帐户?在电话上?还是在网站上?

enter image description here

【问题讨论】:

    标签: dialogflow-es actions-on-google google-signin


    【解决方案1】:
    1. 长期令牌的实施是您的实施。请注意一些these considerations

    2. 正确。更多信息,请参阅Handle authorization requests

    3. 不熟悉您的实现。对服务器端的每个请求都将包含访问令牌。所以,这就是你的实现。

    4. 另外,这是你的实现。但本质上,您需要一种方法来跟踪长期存在的令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2016-01-31
      • 2010-12-23
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多