Google API oauth2 refresh_token在一段时间后失效

时间:2020-08-20 09:58:21

标签: javascript oauth-2.0 google-api strapi

我在使用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的行为与经典令牌相同。

如果您知道问题可能来自何处,我将不胜感激!

祝你有美好的一天!

1 个答案:

答案 0 :(得分:1)

这不是问题-这是标准的OAuth行为,您首先在其中配置生存期,例如:

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

EXPIRY

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

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

视觉化

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