На веб-сайте https://code.google.com/apis/console я зарегистрировал свое приложение, настроил сгенерированный идентификатор клиента: и Client Secret для своего приложения и попытался войти в систему с помощью Google. К сожалению, я получил сообщение об ошибке:
Error: redirect_uri_mismatch
The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI
scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback
access_type=offline
approval_prompt=force
client_id=generated_id
Что означает это сообщение, и как я могу это исправить? Я использую драгоценный камень omniauth-google-oauth2 .
authentication
oauth-2.0
google-signin
user984621
источник
источник
https://accounts.google.com/o/oauth2/auth?client_id={client_id}&response_type=token&redirect_uri={redirect_uri}&scope={scope}
в браузере, вместо запуска всего приложения для тестирования.Ответы:
URI перенаправления (куда возвращается ответ) должен быть зарегистрирован в консоли API, и ошибка указывает на то, что вы этого не сделали или сделали не правильно.
Перейдите в консоль для вашего проекта и посмотрите под API Access. Вы должны увидеть свои
client ID
&client secret
там, вместе со списком URI перенаправления. Если требуемый URI отсутствует в списке, нажмите «Изменить настройки» и добавьте URI в список.РЕДАКТИРОВАТЬ: (Из комментария с высокой оценкой ниже) Обратите внимание, что обновление консоли API Google и это изменение может занять некоторое время. Обычно всего несколько минут, но иногда кажется, что это дольше.
источник
В моем случае это был
www
иnon-www
URL. Фактический сайт имелwww
URL, а URL авторизованного перенаправления в консоли разработчика Google имелиnon-www
URL. Следовательно, произошло несоответствие в URI перенаправления. Я решил это путем обновленияAuthorized Redirect URIs
в консоли разработчика Google доwww
URL.Другие распространенные несоответствия URI:
http://
в URI авторизованного перенаправления и вhttps://
качестве фактического URL-адреса, или наоборотhttp://example.com/
) в URI авторизованного перенаправления и отсутствие конечной косой черты (http://example.com
) в качестве фактического URL-адреса или наоборотВот пошаговые снимки экрана консоли разработчика Google, чтобы тем, кому трудно найти страницу консоли разработчика, чтобы обновить URI перенаправления.
Вот статья Google о создании проекта и идентификатора клиента .
источник
Если вы используете кнопку JavaScript javascript , вам придется использовать
postmessage
вместо фактического URI. Мне потребовался почти весь день, чтобы понять это, поскольку в документах Google по какой-то причине не указано четко.источник
Error: invalid_request
origin parameter is required!
$client->setRedirectUri('postmessage');
вместо$client->setRedirectUri('http://your.url...');
В любом потоке, в котором вы получили код авторизации на стороне клиента, например,
GoogleAuth.grantOfflineAccess()
API , и теперь вы хотите передать код на сервер, выкупить его, сохранить токены доступа и обновить, тогда вам придется использовать буквенную строкуpostmessage
вместо redirect_uri.Например, на основе фрагмента в документе Ruby :
Единственная документация Google, которую можно упомянуть,
postmessage
- это старый документ для входа в Google+ . Вот скриншот и ссылка на архив, так как G + закрывается, и эта ссылка, вероятно, исчезнет:Абсолютно непростительно, что страница документации для автономного доступа не упоминает об этом. #FacePalm
источник
postmessage
, но я хотел бы привести конкретные обстоятельства (напримерgrantOfflineAccess
), когда мне понадобился этот сумасшедший недокументированный взлом. : PI тоже не хотел, чтобы это было правдой. :) Стоит мне часами головной боли.Для моего веб-приложения я исправил свою ошибку, написав
источник
Обязательно проверьте протокол "http: //" или "https: //", так как Google также проверяет протокол. Лучше добавить оба URL в список.
источник
Это кажется довольно странным и раздражающим, что единого решения не существует. для меня http: // localhost: 8000 не сработало, но http: // localhost: 8000 / сработало.
источник
redirect_uri
на консоли разработчика и в вашем приложении должен быть Точный матч.Когда вы регистрируете свое приложение на https://code.google.com/apis/console и создаете идентификатор клиента, вы получаете возможность указать один или несколько URI перенаправления. Значение
redirect_uri
параметра в вашем URI аутентификации должно точно соответствовать одному из них.источник
https://code.google.com/apis/console
больше не действителенЭтот ответ так же , как ответить на этот вопрос Майка , и ответ Джеффа , оба набора
redirect_uri
наpostmessage
на стороне клиента. Я хочу добавить больше о стороне сервера, а также об особых обстоятельствах, применимых к этой конфигурации.Tech Stack
Backend
Внешний интерфейс
create-react-app
версия 2.1.5Поток «Код» (специально для Google OAuth2)
Описание: React -> запросить «код» социальной авторизации -> запросить токен jwt для получения статуса «логин» с точки зрения вашего собственного внутреннего сервера / базы данных.
responseType="code"
чтобы получить код авторизации. (это не токен, не токен доступа!)react-google-login
вышеупомянутых.{ "provider": "google-oauth2", "code": "your retrieved code here", "redirect_uri": "postmessage" }
REST_SOCIAL_OAUTH_ABSOLUTE_REDIRECT_URI
,REST_SOCIAL_DOMAIN_FROM_ORIGIN
иREST_SOCIAL_OAUTH_REDIRECT_URI
в Джанго,settings.py
не нужны . (Это константы, используемые Django REST Social Auth) Короче говоря, вам не нужно ничего настраивать, связанные с перенаправлением URL в Django ."redirect_uri": "postmessage"
В React внешнего интерфейса достаточно. Это имеет смысл, потому что социальная работа по аутентификации, которую вы должны выполнить на своей стороне, - это все POST-запросы в стиле Ajax во внешнем интерфейсе, без отправки какой-либо формы, поэтому по умолчанию перенаправление не происходит. Вот почему URL-адрес перенаправления становится бесполезным, если вы используете поток кода + JWT, а настройка URL-адреса перенаправления на стороне сервера не дает никакого эффекта.youremailprefix717e248c5b924d60
если бы ваш адрес электронной почты былyouremailprefix@example.com
. Он добавляет некоторую случайную строку для создания уникального имени пользователя. Это поведение по умолчанию, я считаю, что вы можете настроить его и свободно копаться в их документации.Authorization
заголовок и отправите запрос к внутреннему интерфейсу, серверный интерфейс Django теперь распознает его как имя входа, то есть аутентифицированное пользователь. Конечно, если ваш токен истекает, вы должны обновить его, сделав еще один запрос.О, боже мой, я потратил более 6 часов и наконец понял это правильно! Я считаю, что это первый раз, когда я увидел эту
postmessage
вещь. Любой, кто работает надDjango + DRF + JWT + Social Auth + React
комбинацией, обязательно столкнется с этим. Я не могу поверить, что ни одна из статей там не упоминает об этом, кроме ответов здесь. Но я очень надеюсь, что этот пост сэкономит вам массу времени, если вы используете стек Django + React.источник
2015July15 - вход, который работал на прошлой неделе с этим скриптом при входе в систему
перестал работать и начал вызывать ошибку 400 с
Error: redirect_uri_mismatch
и в разделе ДЕТАЛИ:
redirect_uri=storagerelay://...
я решил это, изменив на:
источник
Контрольный список:
http
илиhttps
?&
или&
?/
) или открытая?
(CMD/CTRL)+F
, найдите точное совпадение на странице учетных данных. Если не найден, ищите недостающий.источник
В моем случае мой тип приложения - «Другое». Так что я не могу найти
Authorized redirect URIs
на странице учетных данных. Кажется, появляется в Тип приложения: «Веб-приложение». Но вы можете нажать наDownload JSON
кнопку, чтобы получитьclient_secret.json
файл.Открыть файл в формате JSON, и вы можете найти параметр , как это:
"redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
. Я решил использовать http: // localhost, и он прекрасно работает для меня.источник
URL перенаправления чувствителен к регистру.
В моем случае я добавил оба: http: // localhost: 5023 / AuthCallback / IndexAsync http: // localhost: 5023 / authcallback / indexasync
источник
Ни одно из вышеперечисленных решений не помогло мне. ниже сделал
изменить авторизованные URL-адреса перенаправления на - https: // localhost: 44377 / signin-google
Надеюсь, это кому-нибудь поможет.
источник
Остерегайтесь лишнего
/
в конце URLhttp://localhost:8000
отличается отhttp://localhost:8000/
источник
Пользователи Rails (из документации omniauth-google-oauth2 ):
ПОМНИТЕ: Не включайте в конце "/"
источник
Если вы используете этот учебник: https://developers.google.com/identity/sign-in/web/server-side-flow, то вам следует использовать «postmessage».
В GO это решило проблему:
источник
для меня это было потому, что в списке «URI авторизованного перенаправления» я неправильно поставил
https://developers.google.com/oauthplayground/
вместоhttps://developers.google.com/oauthplayground
(без/
конца).источник
Позвольте мне завершить ответ @ Bazyl: в полученном мною сообщении упоминается URI
"http://localhost:8080/"
(который, конечно, выглядит как внутренняя конфигурация Google). Я изменил авторизованный URI для этого"http://localhost:8080/"
, и сообщение больше не появлялось ... И видео загрузилось ... Документация APIS ОЧЕНЬ хромает ... Каждый раз, когда у меня что-то работает с google apis, я просто чувствую себя "везучим", но не хватает хорошей документации об этом .... :( Да, у меня все получилось, но я пока не понимаю, почему это не удалось, и почему это сработало ... Был только ОДИН место для подтверждения URI в сети, и оно было скопировано в client_secrets.json ... Я не получаю, если есть ТРЕТЬЕ место, где нужно написать тот же URI ... Я нахожу не только документацию, но и GUI дизайн Google 'источник
Любой, кто пытается найти, где установить URL-адреса перенаправления в новой консоли: APIs & Auth -> Credentials -> идентификаторы клиента OAuth 2.0 -> Нажмите на ссылку, чтобы найти все ваши URL-адреса перенаправления
источник
Мне нужно было создать новый идентификатор клиента в разделе «APIs & Services» -> «Учетные данные» -> «Создать учетные данные» -> OAuth -> «Другие».
Затем я скачал и использовал client_secret.json с моей программой командной строки, которая загружается в мою учетную запись YouTube. Я пытался использовать идентификатор клиента OAuth веб-приложения, который выдавал мне ошибку URI перенаправления в браузере.
источник
Попробуйте сделать эти проверки:
Наслаждаться :)
источник
В моем случае мне пришлось проверить тип идентификатора клиента для веб-приложений / установленных приложений.
установленные приложения: http: // localhost [URI перенаправления] В этом случае localhost просто работает
веб-приложения: вам нужно действительное имя домена [URI перенаправления:]
источник
Что вам нужно сделать, это вернуться в консоль разработчика и перейти к API-интерфейсам и авторизации> Экран согласия и заполнить его. В частности, название продукта.
источник
Не забудьте указать путь после вашего домена и IP. В моем случае я забыл:
/ oauth2callback
источник
У меня было два URI запроса в консоли : http: // xxxxx / client / api / spreadsheet / authredirect и http: // localhost .
Я попробовал все лучшие ответы на этот вопрос и подтвердил, что ни один из них не был моей проблемой.
Я удалил localhost из консоли, обновил свой client_secret.json в моем проекте, и ошибка рассогласования исчезла.
источник
У меня была та же проблема с входом в Google, я собирался вырвать мои волосы !!! Я правильно ввел свои обратные вызовы на панели учетных данных Google на консоли разработчика Google, вот мои URL-адреса перенаправления:
https://www.example.com/signin-google
https://www.example.com/signin-google/
https://www.example.com/oauth2callback
https://www.example.com/oauth2callback/
каждая вещь кажется в порядке, верно? но он все еще не работал, пока я не добавил еще один волшебный URL - адрес. Я добавил signin-google url (который является обратным вызовом Google по умолчанию) без www и проблема решена.
Примите это во внимание (в зависимости от вашего домена), вам может понадобиться, а может и нет, добавлять как с URL-адресами, так и без них.
источник
У меня есть приложение внешнего интерфейса и интерфейс API.
Со своего бэкэнд-сервера я тестировал, нажав google api, и столкнулся с этой ошибкой. В течение всего моего времени я задавался вопросом, почему я должен давать,
redirect_uri
поскольку это всего лишь бэкэнд, для внешнего интерфейса это имеет смысл.То, что я делал, давало другое
redirect_uri
(хотя и действительное) от сервера (при условии, что это просто заполнитель, его нужно только зарегистрировать в Google), но мой URL-адрес внешнего интерфейса, который создал код токена, был другим. Поэтому, когда я проходил этот код при тестировании на стороне сервера (для которого redirect-uri отличался), я столкнулся с этой ошибкой.Так что не делайте эту ошибку. Убедитесь, что ваш веб-интерфейс
redirect_uri
совпадает с вашим сервером, так как Google использует его для проверки подлинности.источник
Ниже приведены причины ошибки: возникает проблема redirect_uri_mismatch:
Рекомендуется использовать домен URL
источник
Хитрость заключается в том, чтобы ввести правильный URL перенаправления в точке создания идентификатора. Я обнаружил, что обновление URL-адреса перенаправления после создания идентификатора с помощью «Редактирования» просто не выполняет работу. Для меня также работало дублирование всей папки «vendor» и копирование ее в то же место, где находится файл «oauth» (до тех пор, пока вы успешно не сгенерируете токен, а затем не сможете удалить дубликат папки «vendor»). Это потому, что попытка указать на папку поставщика через «../vendor/autoload» не сработала для меня.
Итак, удалите существующий проблемный идентификатор клиента OAuth и попробуйте этот подход, он будет работать.
источник