Google API oauth2 refresh_token 一定时间后失效

Google API oauth2 refresh_token becomes invalid after a certain time

我遇到了 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 具有与经典令牌相同的行为。

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

祝你有愉快的一天!

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

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

到期

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

收到 401 时,客户端使用刷新令牌获取新的访问令牌。最终刷新令牌也过期并且令牌更新尝试 returns 出现 invalid_grant 错误。然后必须将用户重定向到 re-authenticate.

可视化

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