Google 令牌刷新返回“令牌已过期或撤销”。

Posted

技术标签:

【中文标题】Google 令牌刷新返回“令牌已过期或撤销”。【英文标题】:Google token refresh returns "Token has been expired or revoked." 【发布时间】:2019-01-21 13:59:00 【问题描述】:

我有一个经 Google 批准的 Google OAuth2 客户端,它为具有所需范围的用户帐户提供离线访问。我的后端应用程序存储并在需要时使用refresh token 刷新access tokens

最近,我们发现我们的令牌刷新尝试遇到了来自 Google 的错误:


    "error" : "invalid_grant",
    "error_description" : "Token has been expired or revoked."

没有其他信息。

我的 Google OAuth 客户端没有任何变化。用户未更改帐户密码。该用户尚未撤销对我的客户端的访问权限。

令牌刷新突然出现此类错误的原因可能是什么?将来如何避免这种情况(如果可能)?

【问题讨论】:

【参考方案1】:

您是否无意中多次要求刷新令牌?大约有一个限制。一个帐户可以拥有的 25 个刷新令牌。

【讨论】:

所以如果我理解正确的话,当我第 26 次请求刷新令牌时,我收到的第一个刷新令牌就失效了,如果我继续坚持并尝试使用它,我会得到错误。我确实想到了这种可能性,并在每次请求时更改了我的应用程序以存储最新的刷新令牌。所以我不会坚持使用无效的“旧”令牌。 刷新令牌的限制已增加到 50 个活动令牌。无论如何,你是对的,一旦你达到这个限制,创建一个新的刷新令牌会自动使最旧的刷新令牌失效,而不会发出警告,所以你总是需要存储最新的刷新令牌。 您不应该多次要求刷新令牌。 有没有关于刷新令牌限制的文档?我没找到。我对此表示怀疑。 @slideshowp2 我怀疑该限制是否已正式记录。他们的关键点是,如果您要求超过 2 或 3 个,您应该考虑重新设计您的应用程序。【参考方案2】:

我遇到了同样的问题,因为我在 2 个不同的文件中运行我的代码并且我所做的删除了 token.pickle 文件,然后重新运行它。

【讨论】:

这个答案对我有用。我有一个泡菜文件,这样我就不需要一直验证自己的身份,直到泡菜文件过期。但该错误并未描述该问题。

以上是关于Google 令牌刷新返回“令牌已过期或撤销”。的主要内容,如果未能解决你的问题,请参考以下文章

Google API OAuth2 刷新令牌突然被撤销

Spring 5,401 返回后带有 Google 刷新访问令牌的 OAuth2

Google APIs OAuth 刷新令牌 url 在 http 重定向 uri 上返回 401?

带有刷新令牌的 Spring Google OAuth2

Google drive api刷新令牌问题[重复]

如何从 Google YouTube Data API OAuth 2 iOS 获取刷新令牌