【问题标题】:Google API oauth2 refresh_token becomes invalid after a certain timeGoogle API oauth2 refresh_token 在一定时间后失效
【发布时间】:2020-12-09 15:31:37
【问题描述】:

我在使用 Google API 和刷新令牌时遇到问题。

return axios.post("https://accounts.google.com/o/oauth2/token", {
   client_id: clientId,
   client_secret: clientSecret,
   refresh_token: querystring.unescape(refresh_token),
   grant_type: "refresh_token",
})
.then((response) => {
   return response.data.access_token;
})
.catch((err) => console.log("error GetTokenWithRefresh: ", err.response))

这很好用。我得到了我的新令牌。 (每次我需要写入 excel 文档时,我都会使用此请求进行测试)。但是一段时间后,我的 refresh_token 失效了

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

我用于授予应用访问权限的 Google 帐户远低于刷新令牌的限制。它仍然在我的 Google 帐户上的安全授权应用程序中有应用程序。就好像 refresh_token 具有与经典令牌相同的行为。

如果您知道问题出在哪里,我将不胜感激!

祝你有美好的一天!

【问题讨论】:

  • 您使用 Javascript 是如何获得刷新令牌的?隐式流不返回刷新令牌。
  • @DaImTo 您可以通过在查询中询问离线访问来请求刷新令牌(请参阅此线程stackoverflow.com/questions/10827920/…
  • @SydneyC。你知道这个答案是从 2012 年开始的吧?如果 OP 使用的是客户端编程语言 (Javascript),他们使用的是隐式流。隐式授权流程不发布刷新令牌,主要是出于安全原因。刷新令牌的范围不像访问令牌那样狭窄,它提供了更多的权力,因此在它被泄露的情况下会造成更大的损害。
  • @DalmTo 感谢您的回答。那么如果我不希望我的用户在每次我的令牌过期时重新登录,我该怎么办?基本上我希望我的用户接受一次应用程序,然后我可以在每次需要时更新 excel
  • 编辑:这是后端请求

标签: javascript oauth-2.0 google-api strapi


【解决方案1】:

这不是问题 - 这是标准 OAuth 行为,您首先配置生命周期,例如:

  • 访问令牌持续 60 分钟
  • 刷新令牌持续 12 小时

到期

访问令牌充当短暂的 API 消息凭据 - 它可以在不影响最终用户的情况下静默更新。当访问令牌过期时,调用者会收到 401 HTTP 状态。

当收到 401 时,客户端使用刷新令牌来获取新的访问令牌。最终,刷新令牌也会过期,并且令牌更新尝试会返回一个 invalid_grant 错误。然后必须将用户重定向以重新进行身份验证。

可视化

请随时运行我的Online Single Page Demo App 以了解它的外观。在我的 SPA 中,刷新令牌包含在仅 HTTP cookie 中,访问令牌存储在浏览器中。

【讨论】:

  • 刷新令牌超过12小时,12小时内不会失效。
猜你喜欢
  • 2017-07-18
  • 1970-01-01
  • 2017-04-29
  • 2017-11-14
  • 2018-01-22
  • 1970-01-01
  • 2021-12-13
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多