新帐户上的 Google API(分析)访问令牌和刷新令牌错误

Posted

技术标签:

【中文标题】新帐户上的 Google API(分析)访问令牌和刷新令牌错误【英文标题】:Google APIs (Analytics) Access Token and Refresh Token Errors on New Account 【发布时间】:2018-09-14 06:11:04 【问题描述】:

我在使用 Google API 中存储的 refresh_token 来授予新的 access_token 时遇到问题。

我们的注册流程保证只有一个帐户通过我们的客户身份验证。在使用我控制的 Google 帐户进行本地测试时,我会收到一个永久存储的 access_token 和 refresh_token。 access_token 用于在到期之前检索必要的数据。如果我在此guide 之后的任何时间尝试刷新此 access_token,我会收到“invalid_grant”“令牌已过期或撤销。”。我可以通过管理面板验证该帐户是否仍然具有访问权限。我的刷新 POST 看起来像:

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=[MY_CLIENT_ID.apps.googleusercontent.com]&client_secret=[MY_CLIENT_SECRET]&refresh_token=[USER'S_REFRESH_TOKEN]&grant_type=refresh_token

点击此端点以验证 access_token:

GET /oauth2/v3/tokeninfo?access_token=[USER'S_ACCESS_TOKEN] HTTP/1.1
Host: www.googleapis.com

如果访问令牌未过期,则提供信息,但在过期后,我按预期收到 400“无效值”。

由于我一直在手动测试 refresh_token POST,我认为 Google 方面不会出现限制。

我已在注册过程中验证我们有 access_type:offline。我能够在初始 access_token 期间获得所有请求的数据,这使我相信权限对于我们想要访问的数据是正确的。

我在这里错过了什么?

【问题讨论】:

【参考方案1】:

我怀疑您遇到的问题是未完成刷新令牌的数量

当用户验证您的应用程序时,您将提供一个刷新令牌。如果用户再次验证您的应用程序,您将获得另一个刷新令牌。两个令牌都将继续工作。

在第一个停止工作之后,您最多可以执行 50 次。因此,请确保您始终将刷新令牌保存到数据库中

选项 2

检查机器上的时钟,确保您与 NTP 不同步

选项三

撤销刷新令牌并再次请求访问权限,用户可能已经撤销了您的访问权限。

【讨论】:

您好,感谢您的评论。当用户通过身份验证时,我可以验证新的刷新令牌是否已保存到数据库中。事实上,当我对我的测试帐户进行身份验证时,抓取第一次身份验证期间发生的刷新,刷新时我仍然会收到一个 invalid_grant 错误。 好的,我又添加了两个选项,这是难以确定的错误之一 我知道用户没有撤​​销,因为我控制了测试帐户并且可以在管理面板中看到该应用程序。我的 macbook 已与苹果服务器正确同步,但我不知道如何查看那里与谷歌服务器之间的同步状态。对于这个问题,我已经遵循了大多数堆栈溢出的答案,但似乎没有一个可以为我解决这个问题。感谢您提供更多选项的回复。

以上是关于新帐户上的 Google API(分析)访问令牌和刷新令牌错误的主要内容,如果未能解决你的问题,请参考以下文章

(JAVA) Google API 分析 - 无法使用“刷新令牌”获取新的“访问令牌”

Google Api,如何将访问令牌传递给API调用

获取访问令牌时服务帐户 API 错误

带有 Google Analytics API v3 的 OAuth 2.0

3600秒后获取新的访问令牌

Google Data Api 返回无效的访问令牌