如何刷新OAuth2令牌?我是否需要等待令牌过期? (Patreon API)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何刷新OAuth2令牌?我是否需要等待令牌过期? (Patreon API)相关的知识,希望对你有一定的参考价值。

我正在使用Patreon的api尝试OAuth。我对OAuth流程很新,并且一直在使用Patreon的javascript包来帮助管理我的请求。

到目前为止,我已经能够通过以下方式成功获取令牌:

import * as patreon from 'patreon';
const patreonOAuthClient = patreon.oauth(clientId, clientSecret);
patreonOAuthClient.getTokens(oauthGrantCode, redirectURL).then((tokenResponse) => { 
     console.log(tokenResponse);
})

我收到的令牌是这样的:

   // Example Token from getTokens()'s then()-response
   tokenResponse = {
        access_token: "UbHYT3H51GpeYueBeBuvBj1fnEFzv5A5870s_rYeMHo",
        expires_in: 2678400,
        refresh_token: "AP5aAw-gJbVf35tWxQb74rmJJz2MhwIYq660m0jiZQ4",
        scope: "my-campaign pledges-to-me users",
        token_type: "Bearer",
        version: "0.0.1"
    }

在我的本地服务器中,我正在尝试让刷新令牌工作,所以我不必每个月都要求用户许可。

虽然当我使用刷新令牌方法时,我收到400错误请求:

patreonOAuthClient.refreshToken(tokenResponse).then(response => {
      console.log(response, 'success!');
}).catch(err => {
      console.log(err, ':(');
});

它没有在npm文档中显示,但你可以在patreon的github source code上找到refreshToken()。

根据here在他们的api文件中:

如果您希望在令牌过期后获取最新信息,可能会发出新令牌以供下个月使用。要刷新令牌,请使用grant_token的授权类型向令牌端点发出POST请求,如示例所示。您还可以在客户端页面中的相应客户端上手动刷新令牌。

所以我得到400的原因是因为我需要等待一个月来刷新令牌,或者我只是错误地实现了API?我希望有更多OAuth经验的人可以告诉我在令牌到期之前或之后是否应该进行令牌刷新?

(如果在它到期之前刷新它是否有某种方式来定时快速服务器在月份到期之前执行它?因为我认为为每个令牌添加超时对内存来说真的很糟糕)。

答案

我终于得到了SDK工作..我在源代码的印象下,令牌是从响应中收到的对象。但事实证明,令牌是字符串值。

所以:

// Using tokenResponse.refresh_token instead of just tokenResponse
patreonOAuthClient.refreshToken(tokenResponse.refresh_token).then(response => {
      console.log(response, 'success!');
}).catch(err => {
      console.log(err, ':(');
});

以上是关于如何刷新OAuth2令牌?我是否需要等待令牌过期? (Patreon API)的主要内容,如果未能解决你的问题,请参考以下文章

刷新 OAuth2 访问令牌的正确范例

OAuth 2.0 刷新令牌是不是完全过期?

为啥我的 Office 365 OAuth2 刷新令牌总是这么快过期?

GoogleAPI oauth2 刷新令牌在 1 小时后过期

移动应用程序的 OAuth2 访问令牌是不是必须过期?

google oauth2 刷新令牌何时过期?