Обмен токеном Google OAuth возвращает invalid_code

Я использую поток OAuth для веб-сервера Google, но когда я попытался обменять код авторизации с токеном доступа, он всегда жалуется на "invalid_code".

Вот проблема:

Шаг 1:

Перенаправить одну из наших страниц на https://accounts.google.com/o/oauth2/auth?scope=email&redirect_uri=https%3A%2F%2Fmyurl.com%2Fcallback&response_type=code&client_id=some_client_id '

Шаг 2:

Перенаправление происходит, и Google перенаправляет на наш URL-адрес https://myurl.com/callback?code=somecode

Шаг 3:

curl -X POST --data "code = somecode & client_id = some_client_id & some_client_secret = some_client_secret & redirect_uri = https://myurl.com/callback&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token -v -trace-ascii/dev/stout

Ответ возвращается:

HTTP 400 Плохой запрос

{ "error": "invalid_grant", "error_description": "Недопустимый код". }

Может кто-нибудь помочь мне с этой проблемой? Спасибо!

Ответ 1

Срок службы кода авторизации составляет всего 10 минут и может использоваться только один раз. Итак, выполните следующие проверки:

  • Вы используете его через 10 минут? Если это так, используйте его через 10 минут.
  • Вы использовали его раньше? Если это так, получите новый, а затем используйте его.
  • Время синхронизации сервера с сервером OAuth Google? Если нет, измените свое время.

Ответ 2

Я использовал http://localhost:8080 в качестве моего URL-адреса перенаправления, так как я просто тестировал их примеры. И мое содержимое json файла имело следующее:

"redirect_uris": [
  "http://localhost:8080"
],
"javascript_origins": [
  "http://localhost:8080"
]

В консоли разработчика у меня был параметр redirect_uri, равный " http://localhost:8080", и я получал ту же ошибку. Я изменил его на " http://localhost:8080/", после чего он начал работать. Надеюсь, это поможет!