【发布时间】: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