Google 上的操作 - 帐户链接过程在授权 URL 之前命中令牌 URL?

Actions on Google - Account Linking process hits Token URL before Authorize URL?

我们正在努力支持 'traditional' 帐户链接流程,因为它似乎是最通用的目的,让我们有机会浮出水面的条款和条件,我们认为这将是最重要的。

但是在针对初学者的智能助理移动应用程序中进行测试,它在我们的 Dev 中的 Actions 应用程序中对大多数用户来说失败了 - 在用户看到智能助理中的 Google 驱动的弹出窗口之后带有 "LINK ACCOUNTS" 选项的应用程序 - 他们点击该选项,我们的授权屏幕不会出现。

Actions 支持人员查看了我们的帐户链接配置,没有发现任何问题。

一些使用较新 Android 手机的测试用户确实会看到我们的授权屏幕,但大多数人不会。

如果我们通过粘贴到同一设备上的浏览器来测试授权 URL - 它总是显示得很好。

奇怪的是 - 如果我们在 失败案例 期间查看我们的 Web 服务器日志,我们看到的唯一命中是我们的 'TOKEN URL',而我的理解是新链接的用户应该在点击令牌之前点击我们的 'Authorization URL'。 正如预期的那样,成功的案例确实首先获得了我们的授权 URL。

如果有人能回答以下任何问题,请随时留言:

有什么想法会导致这里出现问题吗?

或者我们可以深入调查的方法?

应用程序是否需要进行 Alpha 测试或类似测试才能使用帐户链接?

是否normal/expected为从未成功关联帐户的用户打TokenURL?

任何人都可以确认在这种情况下令牌获取响应应该是什么吗? (也许我们没有以让另一端满意的方式回应)

有人有 dummy/HelloWorld 帐户链接 Web 端点供我们测试吗? (天哪,这对开发者社区来说很方便!)

我不知道到底发生了什么,但有一些关于正在发生的事情以及调查途径的提示。我假设您只使用 OAuth 进行帐户链接。如果您正在执行 "Google Sign In for Assistant and OAuth" 的组合,那可能会改变一些事情。解决您的一些问题:

什么会导致助手转到令牌端点而不是 Auth 端点?

除非它已经有一个令牌,否则它不会去令牌端点。我能想到几个可能的场景:

  • 如果它要进行身份验证,因为它已经被授权而获得令牌,所以不会弹出 window。 (但您表示它不会转到该页面。)

  • 如果相关帐户已通过其他方式获得项目授权。可以查看https://myaccount.google.com/permissions是否已经授权

  • 如果您之前使用此帐户对其进行过测试,并且从那时起它就有一个令牌。如果是这样,它应该列在 https://myaccount.google.com/permissions。应该是吧。

  • 如果您使用的不是您认为在相关设备上使用的帐户。

如何调查?

一旦你仔细检查了一些更明显的东西(使用正确的帐户?):

  • 查看发送到令牌端点的内容
    • 令牌是不是很眼熟?调用之间是否相同?不同账户之间是否相同?
    • 您是否记录发行的令牌?可以吗?
    • 与令牌一起发送的其他信息(例如 client_idclient_secret 呢?

是否需要在 Alpha 中?

我不确定。最后我查了一下,没有。我确实认为它不再适用于模拟器,这很烦人,但不需要在 Alpha 中。

但是,这确实让检查变得有点困难,因为没有目录页面可以告诉您该帐户是否已链接。如果您的应用是:https://myaccount.google.com/permissions

,您需要转到该帐户的链接应用列表以删除您的应用:

这样正常吗?

我不这么认为。它不应该到达令牌端点,除非它有一个授权码或刷新令牌来交换。它必须从某个地方得到 code/token。

你应该如何回应?

如果您获得无效的授权代码或刷新令牌,或者令牌端点提供的任何其他信息与其应有的不匹配,您必须return HTTP 错误代码 400 "Bad Request" 并在正文中包含 JSON

{"error": "invalid_grant"}

应该强制它通过用户重新授权。

有public测试服务器吗?

Auth0 不完全是 public,但基本使用是免费的,非常适合测试目的。