我在使用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的行为与经典令牌相同。
如果您知道问题可能来自何处,我将不胜感激!
祝你有美好的一天!
答案 0 :(得分:1)
这不是问题-这是标准的OAuth行为,您首先在其中配置生存期,例如:
EXPIRY
访问令牌充当API消息的短期证书-可以在不影响最终用户的情况下以静默方式更新它。当访问令牌过期时,调用方将收到401 HTTP状态。
当收到401时,客户端使用刷新令牌来获取新的访问令牌。最终,刷新令牌也将过期,并且令牌更新尝试将返回invalid_grant错误。然后必须将用户重定向以重新进行身份验证。
视觉化
随时运行我的Online Single Page Demo App以了解其外观。在我的SPA中,刷新令牌包装在仅HTTP cookie中,访问令牌存储在浏览器中。