我是Moodle管理员,我想连接Dialogflow聊天机器人– Google助手– Moodle网站(Moodle网站=后端服务器= mysite)。 当Dialogflow意图通过Webhook从Moodle请求私人用户数据时,该意图需要登录,并且必须在服务器上标识该用户。我想使用基于OAuth的Google登录链接概念。
已实施的服务
Dialogflow和Moodle通过Webhook连接。 实现– Webhook URL:mysite / client.php。 client.php文件位于Moodle服务器(后端服务器)上。 该意图使用webhook,Moodle以JSON格式发送答案。
Google Oauth 2客户端已创建。 URI:mysite 授权的重定向URI mysite / callback.php(适用于PHP的Google API客户端库-需要登录) oauth-redirect.googleusercontent.com/r/DialogflowBotID(需要DialogflowBot) mysite / moodle37 / admin / oauth2callback.php(需要Moodle)
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的术语来说:后端服务器中存在用户的信息。
Dialogflow和Google Assistant通过帐户链接(developers.google.com/assistant/identity/google-sign-in-oauth)连接在一起。 链接类型:OAuth和Google登录-隐式 授权网址:mysite / login.php 令牌网址:oauth2.googleapis.com/token Google OAuth客户端 您的操作向Google帮助发布的客户ID概述:169222114038… 客户机密:RPF… Google颁发给您的操作帮助概述的客户ID:169222114038… 范围:个人资料,电子邮件 [x] Google通过HTTP基本身份验证标头传输clientID和机密
意图调用Google登录窗口,用户登录重定向URI:oauth-redirect.googleusercontent.com/r/DialogflowBotID (在您可以使用聊天之前,我需要将您的聊天帐户链接到Google。可以吗?很好,塔玛斯!您的学习聊天帐户现在已链接到Google。)
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控制台–在模拟器中进行测试:在您可以使用学习聊天之前,我需要将您的学习聊天帐户关联到Google。可以吗?是 关联:太棒了,塔玛斯!您的学习聊天帐户现已链接到Google。
1 2 3 4 5服务分开工作。
我的问题是:
developers.google.com/assistant/identity/oauth-concept-guide说:用户登录并验证凭据后, 您的服务会创建一个长期访问令牌,并将其返回给Google。 如何在后端服务器上创建长期访问令牌?
用户验证后,如何将callback.php重定向到Dialogflow机器人? 我用了这个:
$ 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));
这合适吗?
client.php提供JSON webhook响应,但不包含令牌和状态。 callback.php包含令牌和状态,但是无法应答webhook。 如何连接client.php,login.php,callback.php文件?
我试图注销用户并取消帐户关联。
unset($ _ SESSION [“ auto”]); 未设置($ _SESSION ['accesToken']); $ client-> revokeToken(accessToken); $ client-> revokeToken();
用户如何取消关联帐户的链接?在电话上?或在网站上?
答案 0 :(得分:0)
长期令牌的实现是您的实现。请注意these considerations中的某些内容。
正确。有关更多信息,请参见Handle authorization requests
不熟悉您的实现。对服务器端的每个请求都将包含访问令牌。所以,这就是您的实现。
这也是您的实现。但从本质上讲,您需要一种跟踪长期令牌的方法。