Нам нужно использовать API календаря Google.
Для проверки подлинности запроса мы получаем токен доступа и обновляем токен из токена авторизации, предоставленного сервисом Google oauth2.
Но так как токен доступа имеет время истечения одного часа, мы обновляем каждый access_token каждый час.
Но для некоторых пользователей срок действия маркеров обновления истек (даже если они не аннулировали разрешения в своих настройках Google).
Вопросы:
Есть ли лучший способ обновить токен доступа?
Нужно ли нам продолжать получать новый токен доступа через час?
Я использую библиотеку реагировать-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, когда истек срок действия старого.
Сообщения об ошибках, которые я получаю:
invalid_grant: Bad Request
invalid_grant: Token has been expired or revoked
Я думаю, что # 2 - это когда пользователь аннулировал разрешения вручную в своих настройках, но ошибка, упомянутая в # 1, требует решения.