如何在应用程序内部使用刷新令牌刷新访问令牌?

时间:2019-05-29 10:40:08

标签: google-api google-calendar-api google-oauth2

我们需要使用Google日历API。

为了对请求进行身份验证,我们从Google oauth2服务提供的授权令牌中获取访问令牌并刷新令牌。

但是,由于刷新令牌的有效时间为一小时,因此我们每小时刷新一次每个refresh_token。 但是对于某些用户来说,刷新令牌仍已过期(即使他们没有撤消其Google设置的权限)。

问题:

  1. 是否有更好的方法来刷新刷新令牌?

  2. 我们真的需要每隔一小时继续获取新的刷新令牌吗?

我正在使用react-google-login库从Google请求身份验证令牌。

我的服务器在python3中,并使用oauth2client库。

用于获取新的刷新令牌的代码段,如下所示:


import httplib2
def refresh_token(credentials):
    http = credentials.authorize(httplib2.Http())
    credentials.refresh(http)
    return credentials
Some Props to get google authorisation token from react application:
    const googleAPIProps = {
      clientId: GOOGLE_CLIENT_ID,
      scope: APIKEYS.googleAuth.scopes.join(' '),
      responseType: 'code',
      prompt: 'consent',
      isSignedIn: false,
      accessType: 'offline',
      uxMode: 'popup'
    };

我希望要么我们不必每隔一小时获取新的刷新令牌,要么至少credentials.refresh(http)在旧的过期后获取新的refresh_token时不引发任何异常。

我收到的错误消息是:

  1. invalid_grant: Bad Request
  2. invalid_grant: Token has been expired or revoked

我认为#2是用户在其设置中手动撤消权限时,但我需要解决#1中提到的错误。

0 个答案:

没有答案