keycloak Неверный параметр: redirect_uri


87

Когда я пытаюсь нажать на свой api для аутентификации пользователя из keycloak, но это дает мне ошибку Недопустимый параметр: redirect_uri на странице keycloak. Я создал свое собственное царство отдельно от хозяина. keycloak работает на http. Пожалуйста, помогите мне.


при проверке через элемент проверки он показывает ошибку 500
ВИДЖЕЙ ТАКУР

2
Пожалуйста, не задавайте один и тот же вопрос несколько раз. Если вы хотите добавить дополнительные сведения к исходному вопросу, вы можете сделать это, нажав «изменить» прямо под своим вопросом.
THelper


1
Проверьте https vs http в URL-
адресе

1
В моем случае это была глупая ошибка: «<IP-адрес>» вместо «http: // <IP-адрес>»
SwissNavy

Ответы:


56

Для меня сработало добавление wildchar '*' . Хотя для производственных сборок я собираюсь более конкретно указать значение этого поля. Но для целей разработки вы можете это сделать.

введите описание изображения здесь

Настройка доступна в консоли администратора keycloak -> Realm_Name -> Cients -> Client_Name .

РЕДАКТИРОВАТЬ: НЕ ДЕЛАЙТЕ ЭТО В ПРОИЗВОДСТВЕ. Это создает серьезную брешь в безопасности.


13
Этот ответ может быть опасным недостатком безопасности, поскольку тем самым вы открываете дверь для атаки небезопасного перенаправления.
Майкл Курси

Не могу поверить, что этот ответ сейчас набрал наибольшее количество голосов. Это далеко не решение, и на самом деле оно должно появляться только в комментариях. С другой стороны, в вопросе слишком мало информации, чтобы даже пытаться ответить.
bsaverino

Что мы должны туда поместить, если мы используем Keycloak из мобильного приложения (кодируется React Native)?
Себастьян Диас

35

Если вы являетесь разработчиком .Net, пожалуйста, проверьте ниже Конфигурации keycloakAuthentication options class set CallbackPath = RedirectUri, // это свойство необходимо установить иначе, оно покажет неверную ошибку перенаправления

Я столкнулся с той же ошибкой. В моем случае проблема заключалась в том, что действительные URI перенаправления были неверными . Итак, вот шаги, которым я следовал.

Сначала войдите в keycloack как пользователь с правами администратора. Затем выберите свой мир (возможно, вы автоматически перейдете в мир). Затем вы увидите экран ниже

введите описание изображения здесь

Выберите « Клиенты» на левой панели. Затем выберите соответствующий клиент, который вы настроили для своего приложения. По умолчанию вы будете вкладкой « Настройка », если не выберите ее. Мое приложение работало на порту 3000, поэтому мои правильные настройки указаны ниже. скажем, у вас есть приложение, работающее на localhost: 3000, поэтому ваши настройки должны быть такими

введите описание изображения здесь


19

Если вы получаете эту ошибку из-за созданного вами нового мира

В URL-адресе, на который вы перенаправлены (возможно, вам придется поискать этот URL-адрес в инструментах разработчика Chrome), измените область с masterтой, которую вы только что создали, и, если вы не используете https, убедитесь, что redirect_uri также использует http.

Если вы получаете эту ошибку, потому что пытаетесь настроить Keycloak в общедоступном домене (не локальном хосте)

Шаг 1) Следуйте этой документации, чтобы настроить базу данных MySql. Вам также может потребоваться обратиться к официальной документации .

Шаг 2) Запустите командуupdate REALM set ssl_required = 'NONE' where id = 'master';

Примечание. На этом этапе технически вы можете войти в систему, но Keycloak версии 4.0 использует https для uri перенаправления, хотя мы только что отключили поддержку https. Пока Keycloak не исправит это, мы можем обойти это с помощью обратного прокси. Обратный прокси-сервер - это то, что мы захотим использовать в любом случае, чтобы легко создавать сертификаты SSL / TLS, не беспокоясь о хранилищах ключей Java.

Примечание 2: Keycloak с тех пор выпустил собственный прокси. Я еще не пробовал это сделать, но на этом этапе вы можете перестать следовать моим указаниям и проверить (привратник keycloak) [ https://www.keycloak.org/downloads.html] . Если у вас возникнут проблемы с настройкой Keycloak Gatekeeper, я сохраню свои инструкции по настройке обратного прокси с Apache.

Шаг 3) Установите Apache. Мы будем использовать Apache в качестве обратного прокси (я пробовал NGINX, но у NGINX были некоторые ограничения, которые мешали). Посмотрите, как yum устанавливает Apache (CentOs 7) и apt-get install Apache (Ubuntu 16), или найдите инструкции для вашего конкретного дистрибутива.

Шаг 4) Запустите Apache

  • Используйте sudo systemctl start httpd(CentOs) или sudo systemctl start apache2(Ubuntu)

  • Используйте sudo systemctl status httpd(CentOs) или sudo systemctl status apache2 (Ubuntu), чтобы проверить, работает ли Apache. Если вы видите текст зеленого цвета active (running)или если читается последняя запись, Started The Apache HTTP Server.то все в порядке.

Шаг 5) Мы установим SSL-соединение с обратным прокси-сервером, а затем обратный прокси будет взаимодействовать с keyCloak через http. Поскольку это http-соединение происходит на одном компьютере, вы все еще в безопасности. Мы можем использовать Certbot для настройки автоматического обновления сертификатов.

Если этого типа шифрования недостаточно, а ваша политика безопасности требует сквозного шифрования, вам придется выяснить, как настроить SSL через WildFly вместо использования обратного прокси.

Примечание: я никогда не мог заставить https правильно работать с порталом администратора. Возможно, это просто ошибка в бета-версии Keycloak 4.0, которую я использую. Предполагается, что вы можете установить уровень SSL так, чтобы он требовался только для внешних запросов, но это, похоже, не сработало, поэтому на шаге 2 мы установили для https значение none. С этого момента мы продолжим использовать http через туннель SSH для управления настройками администратора.

Шаг 6) Всякий раз, когда вы пытаетесь посетить сайт через https, вы запускаете политику HSTS, которая автоматически заставляет HTTP-запросы перенаправлять на https. Следуйте этим инструкциям, чтобы удалить правило HSTS из Chrome , а затем пока больше не посещайте https-версию сайта.

Шаг 7) Настройте Apache. Сначала найдите, где находится ваш файл httpd.conf . Ваш файл httpd.conf, вероятно, включает файлы конфигурации из отдельного каталога. В моем случае я нашел весь свой файл конфигурации в conf.dкаталоге, расположенном рядом с папкой, в которой находился файл httpd.conf.

Как только вы найдете свои файлы conf, измените или добавьте следующие записи виртуального хоста в свои файлы conf. Убедитесь, что вы не переопределяете уже существующие параметры SSL, созданные certbot. Когда закончите, ваш файл конфигурации должен выглядеть примерно так.

<VirtualHost *:80>
    RewriteEngine on

    #change https redirect_uri parameters to http
    RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
    RewriteRule . %1redirect_uri=http%2 [NE,R=302]

    #uncomment to force https
    #does not currently work
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}

    #forward the requests on to keycloak
    ProxyPreserveHost On    
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    RewriteEngine on

    #Disable HSTS
    Header set Strict-Transport-Security "max-age=0; includeSubDomains;" env=HTTPS


    #change https redirect_uri parameters to http
    RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
    RewriteRule . %1redirect_uri=http%2 [NE,R=302]

    #forward the requests on to keycloak
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    #Leave the items added by certbot alone
    #There should be a ServerName option
    #And a bunch of options to configure the location of the SSL cert files
    #Along with an option to include an additional config file

</VirtualHost>
</IfModule>

Шаг 8) Перезагрузите Apache. Используйте sudo systemctl restart httpd(CentOs) или sudo systemctl restart apache2(Ubuntu).

Шаг 9) Прежде чем у вас будет возможность попытаться войти на сервер, поскольку мы сказали Keycloak использовать http, нам необходимо настроить другой метод безопасного подключения. Это можно сделать, установив VPN-сервис на сервере Keycloak или используя SOCKS. Я использовал прокси SOCKS. Для этого вам сначала нужно настроить динамическую переадресацию портов.

ssh -N -D 9905 user@example.com

Или настроить через Putty .

Весь трафик, отправляемый на порт 9905, теперь будет безопасно маршрутизироваться через туннель SSH на ваш сервер. Убедитесь, что вы занесли в белый список порт 9905 на брандмауэре вашего сервера.

После настройки динамической переадресации портов вам необходимо настроить свой браузер для использования прокси-сервера SOCKS на порту 9905. Инструкции здесь .

Шаг 10) Теперь вы можете войти на портал администратора Keycloak. Для подключения к веб-сайту перейдите по адресу http://127.0.0.1 , и прокси-сервер SOCKS перенесет вас в консоль администратора. Убедитесь, что вы отключили прокси-сервер SOCKS, когда закончите, так как он использует ресурсы вашего сервера и приведет к снижению скорости интернета для вас, если его оставить.

Шаг 11) Не спрашивайте меня, сколько времени мне потребовалось, чтобы разобраться во всем этом.


1
Это была строка, которая привлекла мое внимание: # изменить параметры https redirect_uri на http RewriteCond% {request_uri} \?% {Query_string} ^ (. *) Redirect_uri = https (. *) $ RewriteRule. % 1redirect_uri = http% 2 [NE, R = 302] Я использую nginx, но как только я заменил https на http в redirect_uri, все заработало.
Telmo Dias

9

Перейдите в консоль администратора keycloak> SpringBootKeycloak> Cients> страница входа в приложение. Здесь, в разделе действительного перенаправления uris, добавьте http: // localhost: 8080 / sso / login

Это поможет решить проблему косвенного URI.


13
Проблема в том, что консоль администратора недоступна.
SmallChess

У меня возникла эта проблема после того, как я изменил web-contextнастройку Keycloak
Марк

5

Если вы столкнулись с этой проблемой после внесения изменений в контекстный путь Keycloak, вам необходимо внести дополнительные изменения в настройку URL-адреса перенаправления:

  1. Измените <web-context>yourchange/auth</web-context>обратно на <web-context>auth</web-context>standalone.xml
  2. Перезапустите Keycloak и перейдите на страницу входа ( /auth/admin)
  3. Войдите в систему и выберите область «Мастер».
  4. В боковом меню выберите «Клиенты».
  5. В появившемся списке выберите клиент "security-admin-console".
  6. Измените "Действительные URI перенаправления" с /auth/admin/master/console/*на /yourchange/auth/admin/master/console/*
  7. Сохраните и выйдите. После выхода из системы вы снова увидите сообщение «Недопустимый URL-адрес перенаправления».
  8. Теперь введите исходное изменение <web-context>yourchange/auth</web-context>в standalone.xml Перезапустите Keycloak и перейдите на страницу входа (которая сейчас находится /yourchange/auth/admin)
  9. Войдите и наслаждайтесь

1
в качестве альтернативы вы можете редактировать таблицу redirect_urisв БД и настраивать поля значений
pHiL

4

Войдите на веб-сайт консоли администратора Keycloak, выберите область и ее клиента, затем убедитесь, что все URI клиента имеют префикс протокола, то есть, http://например. Примером может бытьhttp://localhost:8082/*

Другой способ решить проблему - просмотреть вывод консоли сервера Keycloak, найти строку, в которой указано, что запрос был отклонен, скопировать из нее redirect_uriотображаемое значение и вставить его в * Valid Redirect URIsполе клиента на веб-сайте консоли администратора Keycloak. Запрошенный URI тогда является одним из допустимых.


2

Я столкнулся с проблемой Invalid parameter: redirect_uri, следуя примеру весенней загрузки и keycloak, доступному на http://www.baeldung.com/spring-boot-keycloak . при добавлении клиента с сервера keycloak мы должны предоставить URI перенаправления для этого клиента, чтобы сервер keycloak мог выполнить перенаправление. Когда я сталкивался с одной и той же ошибкой несколько раз, я копировал правильный URL-адрес из консоли сервера keycloak и указывал в действительном пространстве URI перенаправления, и он работал нормально!


Можете ли вы объяснить, как это делается
Субин Бабу

2

даже я столкнулся с той же проблемой. Я исправил это, перейдя к конкретному клиенту в области, соответственно, в нем URL-адрес перенаправления добавьте * после вашего полного URL-адреса.

ПРОБЛЕМА БУДЕТ РЕШЕНА

Пример: URI перенаправления: http: localhost: 3000 / myapp / generator / *


2

Я столкнулся с той же проблемой. Я исправил это, перейдя к конкретному клиенту в области, соответственно, в нем URL-адрес перенаправления добавьте * после вашего полного URL-адреса.


2

Для меня у меня отсутствовала косая черта /в конце значения дляValid Redirect URIs



1

Вам нужно проверить консоль администратора keycloak на наличие фронтальной конфигурации. Он должен быть неправильно настроен для URL-адреса перенаправления и веб-источников.


1

Если вы пытаетесь выполнить перенаправление на страницу входа в keycloak после выхода из системы (как и я), это не разрешено по умолчанию, но также необходимо настроить в параметре «Действительные URI перенаправления» в консоли администратора вашего клиента.


1

Эта ошибка также возникает, когда ваш пользователь не имеет ожидаемой роли, делегированной в определении пользователя (установите роль для области в раскрывающемся списке).


0

Ваш URI перенаправления в вашем коде (keycloak.init) должен быть таким же, как URI перенаправления, установленный на сервере Keycloak (клиент -> Действительный URI) нажмите, чтобы просмотреть изображение моего кода нажмите, чтобы просмотреть мои настройки Keycloak


0

Убедитесь, что значение параметра redirect_uri внесено в белый список для клиента, который вы используете. Вы можете управлять конфигурацией клиента через консоль администратора.

URI перенаправления должен точно совпадать с одним из URI перенаправления из белого списка, или вы можете использовать подстановочный знак в конце URI, который хотите добавить в белый список. См .: https://www.keycloak.org/docs/latest/server_admin/#_clients

Обратите внимание, что использование подстановочных знаков для внесения в белый список URI перенаправления разрешено Keycloak, но на самом деле это нарушение спецификации OpenId Connect. См. Обсуждение этого вопроса на https://lists.jboss.org/pipermail/keycloak-dev/2018-De December/011440.html.


0

Похоже, эта проблема может возникнуть, если вы поместите пробел в свое имя Realm. У меня было имя, Debugging Realmи я получил эту ошибку. Когда я перешел на DebuggingRealmэто сработало.

В отображаемом имени все еще может быть пробел. Странно, что keycloak не проверяет это при вводе администратора.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.