Google OAuth: "invalid_grant" еще вещь - PullRequest
0 голосов
/ 08 марта 2019

Я застрял в течение нескольких часов, чтобы запустить поток Google OAuth2 в моем приложении Node / Express. Основы довольно просты:

  1. Создание учетных данных приложения Google
  2. Перенаправить пользователей на экран согласия
  3. Получите code значение
  4. Обмен code на access_token и refresh_token
  5. Магазин refresh_token на будущее

По какой-то причине я не могу пройти шаг 4 выше и всегда получаю следующий ответ:

{
  "error": "invalid_grant",
  "description": "Bad Request"
}

Есть множество других решений, спрашивающих о вышеупомянутом, и ни одно решение еще не работало для меня:

  • Не используйте один и тот же code независимо от результата
  • Подождите немного после добавления новых URI авторизованного перенаправления
  • Включить http://localhost:3000 в качестве URI авторизованного перенаправления
  • Включить все варианты с / без протокола, порта, косой черты
  • Установите access_type в в автономном режиме ранее, если необходимо (и оно есть)
  • Используйте запрос вместо Axios
  • Включить нулевой scope параметр, такой как OAuth Playground
  • Кодирование параметров с использованием строки запроса
  • Подтвердите application/x-www-urlencoded Тип контента
  • Выйти из всех учетных записей Google при повторной попытке
  • Обратите внимание на лимит создания токенов Google

С учетом вышеизложенного, вот особенности моего положения:

Host : http://localhost:3000

Обратный вызов # 1 : http://localhost:3000/auth/google/callback (, где отправляется code и выполняется действие обмена ниже )

Обратный вызов # 2 : http://localhost:3000/auth/google/callbacktwo (, где access_token и refresh_token должны быть возвращены )

Действие Exchange : с учетом модуля запроса

{
    method: 'POST',
    uri: 'https://www.googleapis.com/oauth2/v4/token',
    headers: {
      'content-type': 'application/x-www-form-urlencoded'
    },
    body: {
      'code': req.query.code,
      'redirect_uri': 'http://localhost:3000/auth/google/callbacktwo',
      'client_id': '***.apps.googleusercontent.com',
      'client_secret': '***',
      'scope': null,
      'grant_type': 'authorization_code'
    }
}

URI авторизованного перенаправления : отображается в приложении> Учетные данные> Идентификаторы клиента OAuth 2.0

Смотрите скриншот


В общем, я застрял. Либо что-то принципиально не так с моей установкой / подходом, либо я первый разработчик, столкнувшийся с этой ошибкой (последняя не может быть правдой). Может оплатить помощь тоже.

1 Ответ

0 голосов
/ 08 марта 2019

В шокирующем повороте событий я решил это в течение нескольких минут после публикации выше с изменениями ниже:


Изменение № 1

Добавлены варианты http://127.0.0.1' в мой список URI авторизованного перенаправления

Поскольку «127.0.0.1» соответствует «localhost», я решил попробовать. Прочитайте это в другом месте.


Изменение № 2

Изменено действие redirect_uri действия Exchange на Callback # 1, куда было отправлено code.

Я подумал "а что если Google не нравится, когда redirect URI не там, где он отправил code?".


Изменение № 3

Удален параметр scope действия Exchange

.

Хотя он хорошо виден на детской площадке OAuth, его нет в документации.


А результат? Получил объект, который искал часами:

{
   "access_token": "****",
   "expires_in": 3600,
   "refresh_token": "***",
   "scope": "https://www.googleapis.com/auth/userinfo.profile",
   "token_type": "Bearer",
   "id_token": "*****"
}

Отказ от ответственности: это не означает, что вышесказанное сработает для вас, но оно сработало для меня, и я возьму его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...