Как обновить токен доступа, используя токен обновления внутри моего приложения? - PullRequest
0 голосов
/ 29 мая 2019

Нам нужно использовать API календаря Google.

Для проверки подлинности запроса мы получаем токен доступа и обновляем токен из токена авторизации, предоставленного сервисом Google oauth2.

Но так как токен доступа имеет время истечения одного часа, мы обновляем каждый access_token каждый час. Но для некоторых пользователей срок действия маркеров обновления истек (даже если они не аннулировали разрешения в своих настройках Google).

Вопросы:

  1. Есть ли лучший способ обновить токен доступа?

  2. Нужно ли нам продолжать получать новый токен доступа через час?

Я использую библиотеку реагировать-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, требует решения.

...