Вопрос: Использование Refresh Token Exception {"error": "invalid_grant"} '


Я успешно создал приложение, которое извлекает токен доступа и обновления.

В моем скрипте я проверяю, является ли токен доступа действительным, и если я не использую токен обновления, чтобы получить доступ $client->refreshToken($refreshToken);

Код полностью,

    $refreshToken = '<REFRESH_TOKEN>';

    $client_id = '<CLIENT_ID>';
    $client_secret = '<CLIENT_SECRET>';

    // Setup infomation
    $client = new Google_Client();
    $client->setClientId($client_id);
    $client->setClientSecret($client_secret);
    $client->setAccessType("offline");
    $client->addScope("https://mail.google.com/");

    // If access token is not valid use refresh token
    if($client->isAccessTokenExpired()) {

        // Use refresh token
        $client->refreshToken($refreshToken);

    } else {

        // Use access token
        echo $client->setAccessToken($accessToken);

    }

Однако при попытке использовать токен обновления я получаю excpetion:

Fatal error: Uncaught exception 'Google_Auth_Exception' with message 'Error refreshing the OAuth2 token, message: '{ "error" : "invalid_grant" }''

7


источник


Ответы:


В спецификации OAuth2 «invalid_grant» является своего рода уловкой всех ошибок, связанных с недействительными / истекшими / отозванными токенами (токен предоставления или обновления).

Там в много  потенциальные причины проблем, вот контрольный список:

  1. Серверные часы / время не синхронизированы
  2. Не разрешено для автономного доступа
  3. Изменено Google
  4. Использование истекших токенов обновления
  5. Пользователь неактивен в течение 6 месяцев
  6. Использовать электронную почту службы поддержки вместо идентификатора клиента
  7. Слишком много токенов доступа за короткое время
  8. Клиентский SDK может быть устаревшим
  9. Неверный / неполный токен обновления
  10. Пользователь активно отменил доступ к нашему приложению
  11. Пользователь сбросил / восстановил свой пароль Google

Я написал короткую статью  суммируя каждый элемент с некоторыми инструкциями по отладке, чтобы помочь найти виновника. Мы проводили дни, охотясь за этим, надеемся, что это может помочь другим превратить эти дни в часы.


10



Причина ошибки «Недопустимый грант» может быть вызвана тем, что токен обновления не работает. Это может быть связано с тем, что, когда количество токенов обновления превышает лимит, старые токены становятся недействительными. Если приложение пытается использовать недействительный токен обновления, возвращается ответ об ошибке invalid_grant. ссылка  для дополнительной документации.


4



«invalid_grent» может быть вызван токеном с истекшим / недействительным обновлением. В моем случае у него было дополнительное пространство в конце.


0



Поскольку все говорят вам, насколько я знаю, что ошибка может быть вызвана двумя причинами:

  1. Обновить токен больше недействителен
  2. Обновить токен не так - возможно, некоторые символы скрыты, что код каким-то образом добавляет.

Раньше у меня была эта проблема (такое же сообщение об ошибке), и выяснилось, что токен обновления обновлен.


0



мои проблемы - authorization_code только для обмен  токен доступа, вы не можете его повторно использовать. просто обновите authorization_code, чтобы получить новый токен доступа


0



Теперь у Google есть выделенная страница  в руководстве по API для этой ошибки, где говорится, что для этого есть только 2 причины ...

Предел для каждой уникальной пары клиентов OAuth 2.0 и аккаунта Google Analytics составляет 25 токенов обновления. Если приложение продолжает запрашивать токены обновления для одной и той же пары Client / Account, после того, как будет выпущен 26-й токен, первый токен обновления, который был ранее выпущен, станет недействительным.


0