taral
@taral
php программист

Google Calendar OAuth 2.0. По какой причине может слетать refresh token?

Настроил интеграцию с google calendar. Использовал библиотеку для php google/apiclient. Стандартный код такой
function getClient()
{
     $client = new Google_Client();
     $client->setApplicationName(APP_NAME);
     $client->setScopes('https://www.googleapis.com/auth/calendar');
     $client->setClientId(CLIENT_ID);
     $client->setClientSecret(CLIENT_SECRET);
     $client->setAccessType('offline');
     $client->setRedirectUri('RETURN_URL');
     $client->setApprovalPrompt('force');
     return $client;
}
// $refresh_token - ранее полученный токен
$client = getClient();
$client->refreshToken($refresh_token);
$service = new \Google_Service_Calendar($client);
// далее работаю с календарем

Как можно увидеть я использую только refresh_token. И токен доступа генерирую динамически при запросе. Не могу утверждать что это правильное решение. Но я посчитал что поскольку запросы в гугл календарь не будут частыми, нет смысла морочиться с сохранением токена доступа. И я просто генерирую его динамически.
А теперь какая проблема у меня возникла. У некоторых аккаунтов слетает refresh_token и гугл начинает возвращать ошибку - "error" : "invalid_grant".
На сколько я понял refresh_token не должен иметь срока действия.

Код для интеграции через OAuth 2.0 такой.
echo getClient()->createAuthUrl();
// далее в RETURN_URL разбираю ответ и сохраняю $refresh_token
  • Вопрос задан
  • 665 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lisiy50
php программист
https://developers.google.com/identity/protocols/O... вот ответ.
У refresh_token есть как время действия так и количество раз, которое он может генерировать access_token (лимит 25). В коде каждый раз обновляется access_token, в теории после 25 запросов по api refresh_token станет невалидным. Я сделал больше запросов, все работало нормльно.
Выходит, что логика должна быть следующей:
  1. генерируется access_token на базе refresh_token
  2. сохраняется куда то
  3. проверяется на валидность, если не валидный то возвращаемся к пункту 1

Поправте меня если я ошибаюсь.
Теперь вопрос в другом: в документации написана цифра 25 для лимита использования refresh_token, я сделал больше, почему он продолжает работать?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы