Когда я пытаюсь получить доступ из моего API для аутентификации пользователя из keycloak, но он выдает мне ошибку Недопустимый параметр: redirect_uri на странице keycloak. Я создал свое собственное царство отдельно от мастера. Keycloak работает на http. Пожалуйста, помогите мне.
Keycloak Неверный параметр: redirect_uri
Ответ 1
Для меня работало добавление wildchar '*'. Хотя для производственных сборок я собираюсь быть более конкретным со значением этого поля. Но для целей разработки вы можете сделать это.
Настройка доступна в административной консоли keycloak → Realm_Name → Cients → Client_Name.
ОБНОВЛЕНИЕ: я бы не рекомендовал вышеупомянутое решение для производственных сборок, поскольку это может привести к недостатку безопасности.
Ответ 2
Я столкнулся с той же ошибкой. В моем случае проблема была с действительными URI перенаправления не была правильной. Так что это шаги, которые я следовал.
Сначала войдите в keycloack как администратор. Затем выберите свою область (возможно, вы будете автоматически перенаправлены в область). Тогда вы увидите под экраном
Выберите Клиенты на левой панели. Затем выберите соответствующий клиент, который вы настроили для своего приложения. По умолчанию у вас будет вкладка Настройки, если не выбрать ее. Мое приложение работало на порту 3000, поэтому мои правильные настройки приведены ниже. Допустим, у вас есть приложение, работающее на localhost: 3000, поэтому ваши настройки должны быть такими
Ответ 3
Если вы получаете эту ошибку из-за созданного вами нового царства
В URL-адресе, на который вы перенаправлены (вам, возможно, придется поискать этот URL в инструментах Chrome dev), измените область с master
на ту, которую вы только что создали, и если вы не используете https
, то убедитесь, что redirect_uri также использует http
.
Если вы получаете эту ошибку, потому что пытаетесь настроить Keycloak на общедоступном домене (не локальном)
Шаг 1) Следуйте этой документации, чтобы настроить базу данных MySql. Вам также может понадобиться обратиться к официальной документации.
Шаг 2)
Запустите команду update REALM set ssl_required = 'NONE' where id = 'master';
Примечание: На этом этапе вы должны иметь техническую возможность войти в систему, но версия 4.0 Keycloak использует https для URI перенаправления, хотя мы только что отключили поддержку https. Пока Keycloak не исправит это, мы можем обойти это с помощью обратного прокси. Обратный прокси-сервер - это то, что мы в любом случае захотим использовать для простого создания сертификатов SSL/TLS, не беспокоясь о хранилищах ключей Java.
Примечание 2: 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. С этого момента мы продолжим использовать 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 [email protected]
Или настройте его с помощью Putty.
Весь трафик, отправленный на порт 9905, теперь будет безопасно направляться через туннель SSH на ваш сервер. Убедитесь, что вы используете белый список портов 9905 на брандмауэре вашего сервера.
После настройки динамической переадресации портов вам необходимо настроить браузер на использование прокси-сервера SOCKS на порту 9905. Инструкции здесь.
Шаг 10) Теперь вы сможете войти на портал администратора Keycloak. Чтобы подключиться к веб-сайту, перейдите на http://127.0.0.1, и прокси-сервер SOCKS перенесет вас в консоль администратора. Когда вы закончите, убедитесь, что вы отключили прокси-сервер SOCKS, так как он использует ресурсы вашего сервера и, если он будет включен, приведет к более низкой скорости интернета.
Шаг 11) Не спрашивайте меня, сколько времени у меня ушло, чтобы понять все это.
Ответ 4
Перейдите в консоль администратора Keycloak> SpringBootKeycloak> Cients> страница входа в систему. Здесь в разделе valid-redirect uris добавьте http://localhost: 8080/sso/login
Это поможет решить проблему косвенного uri
Ответ 5
Если вы видите эту проблему после внесения изменений в контекст контекста Keycloak, вам необходимо внести дополнительные изменения в настройку URL-адреса перенаправления:
- Измените
<web-context>yourchange/auth</web-context>
на<web-context>auth</web-context>
в файле standalone.xml - Перезапустите Keycloak и перейдите на страницу входа (
/auth/admin
) - Войдите в систему и выберите область "Мастер"
- Выберите "Клиенты" в боковом меню
- Выберите клиент "security-admin-console" из списка, который появляется
- Измените "Действительные URI Перенаправления" из
/auth/admin/master/console/*
в/yourchange/auth/admin/master/console/*
- Сохраните и выйдите из системы. Вы снова увидите сообщение "Недопустимый URL-адрес перенаправления" после выхода из системы.
- Теперь
<web-context>yourchange/auth</web-context>
свое первоначальное изменение<web-context>yourchange/auth</web-context>
в standalone.xml Перезапустите Keycloak и перейдите на страницу входа (которая теперь/yourchange/auth/admin
) - Войдите и наслаждайтесь
Ответ 6
Войдите в веб-сайт консоли администратора Keycloak, выберите сферу и его клиент, затем убедитесь, что все URI клиента имеют префикс протокола, то есть, например, с http://
. Примером может служить http://localhost:8082/*
Еще один способ решить проблему - просмотреть вывод консоли сервера Keycloak, найти строку, в которой был отклонен запрос, скопировать из него отображаемое значение redirect_uri
и вставить его в поле * Valid Redirect URIs
клиента в консоли администратора Keycloak Веб-сайт. Запрошенный URI затем является одним из приемлемых.
Ответ 7
Вам необходимо проверить консоль администратора keycloak на наличие фронтальной конфигурации. Он должен быть неправильно настроен для перенаправления URL и веб-источников.
Ответ 8
Я столкнулся с параметром Invalid: проблема с проблемой redirect_uri при следующем spring примере загрузки и keyclloak, доступном в http://www.baeldung.com/spring-boot-keycloak. при добавлении клиента с сервера keycloak мы должны предоставить URI перенаправления для этого клиента, чтобы сервер keyclayak мог выполнять перенаправление. Когда я столкнулся с такой же ошибкой несколько раз, я следил за копированием правильного URL-адреса с консоли сервера keycloak и предоставлялся в допустимом пространстве URI Redirect, и он работал нормально!
Ответ 9
Если вы используете поток авторизационного кода, параметр запроса response_type
должен быть равен code
. См. Https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.html.
Ответ 10
Если вы пытаетесь перенаправить на страницу входа в keycloak после выхода из системы (как я это сделал), это не разрешено по умолчанию, но его также необходимо настроить в параметре "Действительные URI перенаправления" в консоли администратора вашего клиента.
Ответ 11
Эта ошибка также выдается, когда у вашего пользователя нет ожидаемой роли, делегированной в определении пользователя (установите роль для области в раскрывающемся списке).