首先,我想提一下之前在以下主题中讨论过这样的问题: How to authenticate user with just a Google account on Actions on Google?
但我找不到任何与Google智能助理应用与我自己的网络服务器相关联的信息。
问题:
GET https://oauth-redirect.googleusercontent.com/r/my-google-assistant-app#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE始终返回“要关联的帐户字段”错误
重现方式:
所以一切都运转得很好。我已成功将我的Google智能助理应用与我的webhook连接。
但后来我决定向另一个需要用户登录的Heroku Web Server(例如: webserver .herokuapp.com)发送请求。所以我决定实施帐户链接我的Google智能助理应用 webserver .herokuapp.com
因此,Google授权在我的网络服务器 .herokuapp.com上完美运行
所以,就是这样!
后记
我打开Google智能助理,告诉它“与我的测试应用对话”,然后它迎接我,并提供我链接帐户。我说是”。 然后,我会看到Google智能助理如何在 webserver .herokuapp.com上请求我的登录网址。然后我输入我的Google电子邮件和密码。结果我登录了我的网络服务器!然后我的网络服务器重定向到:
我收到了我在帖子顶部描述的错误。
任何帮助将不胜感激
带有参数信息的更新
These are my constants:
Google Assistant Project_ID = nodejs-sdk-local-test
Google Assistant Client_ID = 1067979601708-ldr3ga115es3fdo823slfnj46gjoes66.apps.googleusercontent.com
state = manually_set_state_value
流程是我打开我的Google智能助理并说“好的谷歌,与我的测试应用程序交谈”,它回应了我的请求,然后我说了“做一些需要授权的行动”。 Google智能助理应用程序提供我链接帐户,我说“是”。
这是Google智能助理应用程序调用我的https://webserver.herokuapp.com/google-oauth2
端点的地方。此终结点的目的是将我重定向到Google登录页面。
现在我被重定向到Google登录页面(一切似乎都是正确的。client_id
和state
参数类似于常量)。这是我被重定向到的网址示例:https://accounts.google.com/o/oauth2/auth?client_id=1067979601708-ldr3ga115es3fdo823slfnj46gjoes66.apps.googleusercontent.com&redirect_uri=http://webserver.herokuapp.com/complete/google-oauth2/&state=manually_set_state_value&response_type=code&scope=openid+email+profile
在Google登录页面,我输入了我的凭据,然后我被重定向到redirect_uri=http://webserver.herokuapp.com/complete/google-oauth2
端点。此终结点的目的是在webserver.herokuapp.com
注册或登录我,然后将我重定向到另一个Google URL。 Google网址的示例:https://oauth-redirect.googleusercontent.com/r/nodejs-sdk-local-test#access_token=<token_omitted>&token_type=bearer&state=manually_set_state_value
所以似乎一切都是正确的。我登录了webserver.herokuapp.com
,获得了访问令牌。最后一个Google网址中的project_id
和state
参数也与常量类似。无论如何,这个谷歌URL返回错误“帐户无法链接”!
答案 0 :(得分:2)
最常见的原因是,当您重定向到您的网站时,您没有传回发送给您的state
相同的值。确保这是相同的值,为了您的安全,请确保您验证发送给您的其他参数。
当用户被重定向到https://webserver.herokuapp.com/google-oauth2
时,应该有一些参数作为查询的一部分发送。这些参数包括state
参数。看起来应该是这样的:
https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&response_type=token
请注意,虽然client_id
和redirect_uri
是您应该期望和测试的值,但state
值不您应该设置的值。 Google每次都会生成不同的内容。这是您在以后重定向到
state
https://oauth-redirect.googleusercontent.com/r/nodejs-sdk-local-test#access_token=<token_omitted>&token_type=bearer&state=STATE_STRING