#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 для этого запроса и того, из которого был получен код авторизации? Может быть, они должны поступать из одного домена или что-то в этом роде?