Google OAuth "error": ответ "invalid_grant" на запрос об обмене однократным кодом авторизации для обновления и токена доступа - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь реализовать Google Signin для нашего серверного приложения, используя эту документацию: Google Sign-In для серверных приложений

Я успешно выполнил шаги 1-6 и былвозможность получить однократный код авторизации.Однако на шаге 7, когда я делаю запрос на обмен одноразового кода авторизации на токен доступа, я получаю ответ:

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

Я пробовал оба запроса HTTP POST вручную, используя CURL, а также пробовал официальный клиент API Python Pythonбиблиотека.Ответ всегда один и тот же "invalid_grant".

При запросе однократного кода авторизации я обязательно запросил режим автономного доступа.

Я подтвердил, что пользователь, для которого я получаюодноразовый код авторизации действительно предоставил доступ, перейдя на https://myaccount.google.com/u/0/permissions и убедившись, что наше приложение указано в «Сторонних приложениях с доступом к учетной записи» с правильными областями доступа.

Не могли бы вы посоветоватьо том, как отладить это?Сообщение об ошибке, к сожалению, не помогает, и я уже перепробовал все, что смог найти об этой конкретной ошибке при переполнении стека или где-либо еще.

ОБНОВЛЕНИЕ: Я выяснил, в чем проблема.По-видимому, одноразовый код подходит только для одного запроса, независимо от того, успешен он или нет.Итак, я пытался получить токен обновления, и, поскольку моя первая попытка была неверно сформирована, запрос не удался, и при первой же ошибке одноразовый код стал недействительным.Любой последующий запрос, даже правильно сформированный, с использованием этого кода завершается с ошибкой «invalid_grant».Это несколько неожиданное поведение, у меня сложилось впечатление, что «один раз» означает одну успешную попытку.Надеюсь, что это помощь для других, которые будут работать над этим.Я с запросами OAuth возвращает более информативные сообщения об ошибках, чтобы помочь с отладкой.

1 Ответ

0 голосов
/ 18 ноября 2018

Я понял, в чем проблема. По-видимому, одноразовый код подходит только для одного запроса, независимо от того, успешен он или нет. Итак, я пытался получить токен обновления, и, поскольку моя первая попытка была неверно сформирована, запрос не удался, и при первой же ошибке одноразовый код стал недействительным. Любой последующий запрос, даже правильно сформированный, с использованием этого кода завершается с ошибкой «invalid_grant». Это несколько неожиданное поведение, у меня сложилось впечатление, что «один раз» означает одну успешную попытку. Надеюсь, что это полезно для других, которые будут работать над этим. Я с запросами OAuth возвращает более информативные сообщения об ошибках, чтобы помочь с отладкой.

...