Google操作帐户关联流程

时间:2017-01-07 06:20:34

标签: actions-on-google

我为自己的行为编写了一个授权流程,用于管理与" Implicit flow"的链接。我一直在使用网络模拟器进行测试。当我尝试在网络模拟器中运行操作时,它会告诉我链接我的帐户,并提供一个URL:

" https://assistant.google.com/services/auth/handoffs/auth/start?provider=hello_dev&return_url=https://www.google.com/"

我运行该URL,这就是:

  • 我的Java servlet收到来自谷歌的身份验证请求。它包含记录的内容,GOOGLE_CLIENT_ID,REDIRECT_URI,STATE和" response_type = token"
  • 我使用UserServiceFactory.getUserService()登录的Google ID创建访问令牌.getCurrentUser()。getUserId()
  • 我为包含我的ACCESS_TOKEN,token_type = bearer和state =我最初收到的状态字符串的redirect-uri设计了一个URL
  • 我为包含该链接的用户创建了一个网页,以便他们可以点击它并执行链接并链接我的帐户。

效果很好,响应是一个空白页面,其网址为:" https://www.google.com/?result_code=SUCCESS&result_message=Accounts+now+linked。"

但是,我想要一个流程,允许用户确保他们已登录,并登录到他们想要链接的Google帐户

因此,我还提供了一个链接,如果他们愿意,可以将其记录下来。该链接是使用userService.createLogoutURL(thisUrl)

创建的

如果他们这样做,我会向他们展示一个登录链接,使用userService.createLoginURL(thisUrl)创建

一旦他们使用不同的Google ID登录,他们就会回到原始页面,这样他们就可以再次注销或点击"链接帐户"链接。

情况是,如果他们点击"链接帐户"现在链接,EXACT相同的链接,它们会在注销之前成功运行(除了不同的ACCESS_TOKEN值)并使用其他帐户重新登录,响应是一个空白页面,其URL包含:" {{ 3}}"

有两点需要注意:

  • 如果他们退出并使用同一帐户重新登录,则"链接帐户"网址正常
  • 如果他们在开始此过程时根本没有登录,然后登录然后使用"链接帐户"链接工作正常

因此,它失败的唯一时间是他们登录,注销,使用其他帐户登录,然后单击以链接帐户。那是失败的时候。

帐户并不重要,只要浏览器登录到第一个帐户并且在流程中没有变化,多个不同的帐户就可以运行。

老实说,我无法想象这是怎么回事。

如果我在Google Home应用中执行此操作会更糟,因为它会返回一些错误的请求错误"页面,基本上停止工作,永久。停止/开始操作没有帮助。停止/启动Web服务并没有帮助。重新启动Android设备并没有帮助。 Google Home应用中的关联帐户已永久损坏。我能够再次使用它的唯一方法是在我的Android设备上的Chrome浏览器中使用帐户链接URL(来自网络模拟器),这似乎是"重置"一切。

1 个答案:

答案 0 :(得分:1)

目前,我们要求通过模拟器和Google Home应用程序启动帐户关联过程的Google用户与通过Google登录选项登录的Google用户相同,如果提供的话你的auth流程的一部分。这是一项艰难的要求。

出于这个原因,我们建议您不要在帐户关联过程中提供Google注销选项。