Ошибка «redirect_uri_mismatch» при попытке обменять код авторизации на токен доступа в Google API

#google-oauth

#google-oauth

Вопрос:

Как следует из названия, я получаю «redirect_uri_mismatch» при попытке обменять код авторизации на токен доступа в Google API (это поток offline_access). Однако, странная вещь, точно такой же код с одинаковыми параметрами работает в одной среде (промежуточной) и не работает в другой (производственной). Протоколирование показывает, что тела запросов точно такие же (за исключением кода авторизации, очевидно). Текст выглядит следующим образом:

 {
    "client_id": "*client id*",
    "client_secret": "*client secret*",
    "code": "*authorization code*",
    "grant_type": "authorization_code",
    "redirect_uri": "*front-end url, registered in Google cloud console*"
}
  

Комментарии:

1. URI перенаправления, которые у вас есть в консоли разработчика Google, должны точно соответствовать тем, с которых вы отправляете. я предполагаю, что вы не добавили местоположение производства.

2. Если я использую поток автономного доступа и получаю код авторизации из другого (внешнего интерфейса) uri, в то время как я отправляю этот запрос с сервера, должен ли я использовать интерфейс или uri сервера в качестве uri перенаправления?

3. Uril перенаправления — это местоположение, в которое возвращается авторизация. Вы должны добавить сервер, который может обрабатывать вызов. Но если вы используете одну из клиентских библиотек, они закодированы для использования их текущего хоста.

Ответ №1:

redirect_uri — это местоположение, в которое пользователь будет перенаправлен после авторизации.

redirect_uri Это то место, где вам передаются code в GET параметрах запроса. @DalmTo описывает это лучше как «redirect_uri — это местоположение, в которое возвращается код авторизации, это должен быть код, который может обрабатывать обмен кодом авторизации».

redirect_uri Должно соответствовать одному из значений, хранящихся в консоли Google Cloud API. Это мера безопасности, позволяющая предотвратить подделку кем-либо запроса на авторизацию, который перенаправил пользователя на другой сервер. code — это секрет, который обменивается на токены OAuth 2.

Решение состоит в том, чтобы войти в консоль Google Cloud API и добавить redirect_uri для вашей производственной среды или использовать правильное значение в теле запроса, которое уже сохранено в консоли API.

Комментарии:

1. redirect_uri — это местоположение, в которое возвращается код авторизации, это должен быть код, который может обрабатывать обмен кодом авторизации.

2. @DaImTo Мне больше нравится ваше описание, поэтому я добавил ваши слова к своему ответу.

3. Предоставленный мной запрос не предназначен для получения кода авторизации, он работает просто отлично. Это тот, который получает токен доступа из кода авторизации. Этот запрос является POST и возвращает токен в качестве ответа. Что касается решения, redirect_uri, которое я использую, уже добавлено в консоль Google, о чем свидетельствует тот факт, что оно работает в среде разработки, однако то же значение не работает для производства. Знаете ли вы, существуют ли какие-либо ограничения на перенаправление uri для этого запроса и того, из которого был получен код авторизации? Может быть, они должны поступать из одного домена или что-то в этом роде?