簡體   English   中英

Google 助理帳戶關聯 - 使用后端進行身份驗證

[英]Google Assistant Account linking - Authentication with backends

我是 Moodle 管理員,我想連接 Dialogflow 聊天機器人 – Google Assistant – Moodle 站點(Moodle 站點 = 后端服務器 = mysite)。 當 Dialogflow 意圖通過 webhook 從 Moodle 請求私人用戶數據時,該意圖需要登錄,並且必須在服務器上識別用戶。 我想使用基於 OAuth 的 Google 登錄鏈接概念。

實施的服務:

  1. Dialogflow 和 Moodle 通過 webhook 連接。 履行 - Webhook URL:mysite/client.php。 client.php 文件位於 Moodle 服務器(后端服務器)上。 意圖使用 webhook,Moodle 以 JSON 格式發送答案。

  2. Google Oauth 2 客戶端已創建。 URIs: mysite Authorized redirect URIs mysite/callback.php (Google APIs Client Library for PHP - Sign In requires) oauth-redirect.googleusercontent.com/r/DialogflowBotID (DialogflowBot requires) mysite/moodle37/admin/oauth2callback.php (Moodle requires )

  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 表中。 在谷歌術語中:用戶的信息存在於后端服務器中。

  4. Dialogflow 和 Google 助理通過帳戶鏈接 (developers.google.com/assistant/identity/google-sign-in-oauth) 連接。 Linking type: OAuth & Google Sign In – Implicit Authorization URL: mysite/login.php Token URL: oauth2.googleapis.com/token Google OAuth Client Client ID issued by your Actions to Google help outline: 169222114038 … Client secret: RPF … Client Google 向您的操作幫助大綱頒發的 ID:169222114038 ... 范圍:配置文件、email [x] Google 將通過 HTTP 基本身份驗證 Z099FB995346F33E7430

Intent 調用 Google 登錄 window,用戶登錄,重定向 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在同一目錄下。 The mysite/login.php invokes the Google Sign In window (accounts.google.com/signin/oauth... ) and will be redirected to the mysite/callback.php The callback.php handles the OAuth server response verify the token and contains: user data, email address (same as the email address in Moodle) access_token: ya29.a0 … refresh_token = 1//09M8- … id_token = eyJhbGciOi … The callback.php select the user email address from the backend server database and if (存儲的后端 email = = 收到的令牌電子郵件)為用戶建立一個經過身份驗證的 session。

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 響應,但不包含令牌和 state。 callback.php包含token和state,但無法應答webhook。 如何連接client.php、login.php、callback.php文件?

  2. 我試圖注銷用戶並取消關聯該帳戶。

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

用戶如何取消關聯的帳戶? 在電話上? 還是在網站上?

在此處輸入圖像描述

  1. 長期令牌的實施是您的實施。 請注意其中的一些注意事項

  2. 正確的。 更多信息,請參閱處理授權請求

  3. 不熟悉你的實現。 對服務器端的每個請求都將包含訪問令牌。 所以,這是你的實現。

  4. 另外,這是您的實現。 但本質上,您需要一種方法來跟蹤長期存在的令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM