Авторизация Google OAuth 2 – Ошибка: redirect_uri_mismatch

На веб-сайте https://code.google.com/apis/console я зарегистрировал свое приложение, настроил сгенерированный идентификатор клиента и клиентскую тайну в свое приложение и попытался войти в систему с 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 

Что значит это сообщение и как я могу его исправить? Я использую gem omniauth-google-oauth2 .

URI перенаправления (где ответ возвращается) должен быть зарегистрирован в консоли API, и ошибка указывает на то, что вы этого не сделали или не сделали это правильно.

Перейдите в консоль для своего проекта и посмотрите в Access API. Вы должны увидеть свой идентификатор клиента и секрет там, а также список URI перенаправления. Если нужный URI отсутствует в списке, нажмите «Изменить настройки» и добавьте URI в список.

В моем случае это был www и non-www URL. Фактический сайт имел www адрес, а Уполномоченные URI- адреса перенаправления в Google Developer Console имели URL non-www адрес, non-www . Следовательно, было несоответствие в URI перенаправления. Я решил это, обновив Authorized Redirect URIs в Google Developer Console по адресу www .

Другим распространенным несоответствием URI являются:

  • Использование http:// в Авторизованных URI-адресах перенаправления и https:// как фактический URL-адрес или наоборот
  • Использование конечной косой черты ( http://example.com/ ) в URI авторизованного перенаправления и не использование конечной косой черты ( http://example.com ) в качестве фактического URL-адреса или наоборот

Ниже приведены пошаговые скриншоты в Google Developer Console, поэтому было бы полезно, если бы пользователям было трудно найти страницу консоли разработчика для обновления URI перенаправления.

  1. Перейдите на страницу https://console.developers.google.com.

  2. Выберите свой проект

Выберите свой проект

  1. Нажмите на значок меню

Нажмите на значок меню

  1. Нажмите меню API Manager

Выберите меню API Manager

  1. Нажмите «Меню Credentials . И под OAuth 2.0 Client IDs вы найдете свое имя клиента. В моем случае это Web Client 1 . Нажмите на него, и появится всплывающее окно, где вы сможете редактировать авторизированные Javascript Origin и авторизированные URI перенаправления .

Выберите меню «Учетные данные»

Вот статья Google по созданию идентификатора проекта и клиента .

Если вы используете кнопку javascript Google+ , вам нужно использовать postmessage вместо фактического URI. Мне потребовался почти целый день, чтобы понять это, так как в документах Google почему-то это явно не указано.

Для моего веб-приложения я исправил свою ошибку, написав

 instead of : http://localhost:11472/authorize/ type : http://localhost/authorize/ 

Обязательно проверьте протокол «http: //» или «https: //» как протокол проверки google. Лучше добавить оба URL в список.

В любом streamе, где вы GoogleAuth.grantOfflineAccess() код авторизации на стороне клиента, например API GoogleAuth.grantOfflineAccess() , и теперь вы хотите передать код на свой сервер, выкупить его и сохранить токены доступа и обновления, тогда у вас есть для использования литералов postmessage вместо redirect_uri.

Например, опираясь на fragment документа Ruby :

 client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json') auth_client = client_secrets.to_authorization auth_client.update!( :scope => 'profile https://www.googleapis.com/auth/drive.metadata.readonly', :redirect_uri => 'postmessage' # <---- HERE ) # Inject user's auth_code here: auth_client.code = "4/lRCuOXzLMIzqrG4XU9RmWw8k1n3jvUgsI790Hk1s3FI" tokens = auth_client.fetch_access_token! # { "access_token"=>..., "expires_in"=>3587, "id_token"=>..., "refresh_token"=>..., "token_type"=>"Bearer"} 

Единственной документацией Google, которая даже упоминает postmessage является этот старый документ входа в Google+ . Совершенно непростительно, что на странице doc для автономного доступа это не упоминается. #FacePalm

Это кажется довольно странным и раздражающим, что нет «одного» решения. для меня http: // localhost: 8000 не получилось, но http: // localhost: 8000 / отработано.

2015July15 – подпись, которая работала на прошлой неделе с этим скриптом при входе в систему

  

перестали работать и начали вызывать ошибку 400 с Error: redirect_uri_mismatch

и в разделе redirect_uri=storagerelay://...

я решил это, изменив на:

  

Когда вы регистрируете свое приложение на странице https://code.google.com/apis/console и создаете идентификатор клиента, вы получаете возможность указать один или несколько URI перенаправления. Значение параметра redirect_uri на вашем URI авторизации должно точно соответствовать одному из них.

Контрольный список:

  • http или https ?
  • & or & ?
  • конечная косая черта ( / ) или открытая ?
  • (CMD/CTRL)+F , найдите точное совпадение на странице учетных данных. Если не найдено, то найдите отсутствующий.
  • Подождите, пока Google обновит его. Может случиться каждые полчаса, если вы часто меняетесь или можете оставаться в бассейне. Для моего случая было почти полчаса вступить в силу.

URL-адрес перенаправления чувствителен к регистру.

В моем случае я добавил оба: http: // localhost: 5023 / AuthCallback / IndexAsync http: // localhost: 5023 / authcallback / indexasync

Пользователи Rails (из документов omniauth-google-oauth2 ):

Несоответствие протокола исправления для redirect_uri в Rails

Просто установите full_host в OmniAuth на основе Rails.env.

# config / initializers / omniauth.rb

OmniAuth.config.full_host = Rails.env.production? ? ‘ https://domain.com ‘: ‘ http: // localhost: 3000 ‘

ПОМНИТЕ: Не включайте конечную “/”

В моем случае мой учетный тип Тип приложения – «Другое». Поэтому я не могу найти Authorized redirect URIs на странице учетных данных. Кажется, это выглядит в виде приложения: «Веб-приложение». Но вы можете нажать кнопку « Download JSON , чтобы получить файл client_secret.json . введите описание изображения здесь

Откройте json-файл, и вы можете найти такой параметр: "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"] . Я предпочитаю использовать http: // localhost, и он отлично работает для меня.

Если вы используете этот учебник: https://developers.google.com/identity/sign-in/web/server-side-flow, тогда вы должны использовать «postmessage».

В GO это фиксировало проблему:

 confg = &oauth2.Config{ RedirectURL: "postmessage", ClientID: ..., ClientSecret: ..., Scopes: ..., Endpoint: google.Endpoint, } 

Позвольте мне заполнить ответ @ Bazyl: в полученном мной сообщении они упомянули URI "http://localhost:8080/" (что, конечно, похоже на внутреннюю конфигурацию Google). Я изменил авторизованный URI для этого "http://localhost:8080/" , и сообщение больше не появилось … И видео было загружено … Документация APIS ОЧЕНЬ хромает … Каждый раз У меня что-то работает с google apis, я просто чувствую себя «счастливым», но об отсутствии хорошей документации об этом … 🙁 Да, у меня это работает, но я еще не понимаю ни, почему это не удалось, ни почему это сработало … Было только одно место, чтобы подтвердить URI в сети, и он был скопирован в client_secrets.json … Я не понимаю, есть ли ТРЕТЬЕ место, где нужно написать тот же URI. Я нахожу, но не только документацию, но и графический интерфейс Google api довольно хромой …

Кто-то изо всех сил пытается найти, где устанавливать перенаправленные URL-адреса в новой консоли: APIs & Auth -> Credentials -> OAuth 2.0 client IDs -> Щелкните по ссылке, чтобы найти все ваши URL-адреса перенаправления

Ни один из вышеперечисленных решений не работал для меня. ниже

изменить разрешенные URL-адреса перенаправления на – https: // localhost: 44377 / signin-google

Надеюсь, это поможет кому-то.

остерегайтесь дополнительных / в конце URL http://localhost:8000 отличается от http://localhost:8000/

Ошибка REDIRECT_URI_MISMATCH возникает, когда URL-адрес перенаправления, определенный для вашего приложения в службе авторизации, не совпадает со значением параметра «redirect_uri», переданным вашим запросом.

Если вы столкнулись с этой ошибкой при интеграции OAuth2 с Spring Boot, используйте любое из этих решений:

  1. Определите [ip]: [порт] / login в качестве URL-адреса переадресации в службе авторизации. Зная, что вы не изменяете URL-адрес обратного вызова по умолчанию, используемый Spring Security.
  2. ИЛИ установите собственный URL обратного вызова, установив следующие атрибуты в application.properties :

security.oauth2.client.preEstablishedRedirectUri = http: // localhost: 9090 / callback

security.oauth2.client.useCurrentUri = FALSE

Затем определите http: // localhost: 9090 / callback как URL-адрес перенаправления для вашего приложения в google api.

Источник: Spring Boot – Как решить OAuth2 REDIRECT_URI_MISMATCH

Попробуйте выполнить эти проверки:

  1. Идентификатор пакета в консоли и в вашем приложении. Я предпочитаю установить Bundle ID приложения вроде этого «org.peredovik. $ {PRODUCT_NAME: rfc1034identifier}»
  2. Проверьте, были ли вы добавлены типы URL-адресов на вкладке Info, просто введите свой идентификатор Bundle в идентификаторе и схемах URL-адресов, роль установлена ​​в Редактор
  3. В консоли на cloud.google.com «APIs & auth» -> «Экран согласия» заполните форму о вашем приложении. Поле «Название продукта» является обязательным.

Наслаждаться 🙂

В моем случае мне пришлось проверять тип идентификатора клиента для веб-приложений / установленных приложений.

установленных приложений: http: // localhost [Redirect URIs] В этом случае localhost просто работает

веб-приложения: вам нужно действительное имя домена [URI перенаправления:]

Что вам нужно сделать, вернитесь в консоль разработчика и перейдите на экран API и Auth> Consent Screen и заполните его. В частности, название продукта.

Не забудьте указать путь после вашего домена и ip. В моем случае я забыл:

/ oauth2callback

У меня было два запроса URI в консоли, http: // xxxxx / client / api / spreadsheet / authredirect и http: // localhost .

Я пробовал все ответы на этот вопрос и подтвердил, что ни одна из них не была моей проблемой.

Я удалил localhost из консоли, обновил my client_secret.json в своем проекте, и ошибка несоответствия исчезла.

У меня была такая же проблема с входом в Google, я собирался вытащить волосы! Я правильно ввел свои обратные вызовы в панели Google Credential на консоли разработчика 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 и службах -> Учетные данные -> Создать учетные данные -> OAuth -> Другое

Затем я загрузил и использовал client_secret.json с моей программой командной строки, которая загружается на мою учетную запись youtube. Я пытался использовать идентификатор клиента OAuth для веб-приложений, который давал мне ошибку URI перенаправления в браузере.

ОБНОВЛЕНО -> РАБОТА ДЛЯ Android-приложений

Просто используйте:

HTTP: // локальный / oauth2callback

если вы обрабатываете свою собственную логику без ссылки перенаправления для веб-приложений

  • Как защитить статические файлы с помощью аутентификации формы ASP.NET в IIS 7.5?
  • Omniauth: обратный вызов не срабатывает, возвращает отказ с «недопустимыми учетными данными»
  • Вложение свойств по атрибутам
  • Подтвердить подпись Authenticode на EXE-C ++ без CAPICOM
  • Микширование форм с помощью проверки подлинности Windows
  • HttpURLConnection отлично работает в Android 2.x, но НЕ в 4.1: не обнаружены проблемы аутентификации
  • Аутентификация с помощью двух разных таблиц
  • Как выйти из веб-сайта с использованием аутентификации BASIC?
  • Keycloak извлекает пользовательские атрибуты для KeycloakPrincipal
  • java.io.IOException: обнаружено не было
  • Неисправность получения ClaimsPrincipal при использовании EasyAuth для аутентификации против AAD в Azure App Service в веб-приложении Asp.Net Core
  • Interesting Posts

    C # webbrowser Ajax call

    Как установить традиционные параметры принтера из приложения современного пользовательского интерфейса (Reader)?

    Каким должен быть цвет Ripple, colorPrimary или colorAccent? (Дизайн материалов)

    JSF-управляемая EJB-инъекция

    Измените изображение в Gimp с градиентом, например, на блестящей кнопке или наклейке

    Как создать ArrayList (ArrayList ) из массива (int ) в Java

    100 Мбит / с и Gigabit коммутатор в той же локальной сети

    Php не распознается как внутренняя или внешняя команда (окна 7)

    Как запустить Streamripper32 из Task Scheduler

    В Angular, как вы определяете активный маршрут?

    Как я могу изменить свой почтовый ящик по умолчанию и отправленные папки в Outlook 2010?

    Будет ли кодирование HTML предотвращать все виды атак XSS?

    Не удается изменить приоритет сетевого подключения в Windows 10

    Звук отключается, когда загрузка ЦП выше ~ 30%

    Как мы можем настроить внутренний картограф Jackson при использовании RestTemplate?

    Давайте будем гением компьютера.