Я застрял в течение нескольких часов, чтобы запустить поток Google OAuth2 в моем приложении Node / Express. Основы довольно просты:
- Создание учетных данных приложения Google
- Перенаправить пользователей на экран согласия
- Получите
code
значение
- Обмен
code
на access_token
и refresh_token
- Магазин
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
Смотрите скриншот
В общем, я застрял. Либо что-то принципиально не так с моей установкой / подходом, либо я первый разработчик, столкнувшийся с этой ошибкой (последняя не может быть правдой). Может оплатить помощь тоже.