почему keycloak удаляет SSL в uri перенаправления?

У нас есть простое требование, где: PS: https: / === https: //

Когда пользователь переходит на https: /company_landing.company.com, он должен быть перенаправлен на страницу входа в keycloak (по адресу https: /ourcompany-keycloak.company.com). Пользователь вводит свои учетные данные для входа в keycloak. После успешного входа в keycloak они будут представлены на странице company_landing.

Проблема в следующем:

Когда пользователь вводит - https: /company_landing.company.com

Keycloak пытается открыть целевую страницу, но выдает внутреннюю ошибку сервера 500 и говорит «Неверный uri перенаправления», и в браузере я вижу это:

https: /ourcompany-keycloak.company.com/auth/realms/realm1/tokens/login? client_id = company_dev & state = aaaafffff-559d-4312-a8be-123412341234 & redirect_uri = http% 3A% 2F% 2Fcompany_landing.company.com % 3A8081% 2F% 3Fauth_callback% 3D1

Если вы наблюдаете приведенный выше uri перенаправления, я думаю, проблема в том, что вместо https uri перенаправления начинается с http, а http: /company-landing.company.com не существует.

Настройки: настройки клавиатуры: -

Область -> настройки -> логин: Требовать SSL = все запросы (также пробовал с "внешним")

Приложения -> realm1 -> настройки -> URI перенаправления = https://company_landing.company.com/ *

Балансировщик нагрузки AWS: Конфигурация порта: переадресация с 443 (https) на 8443

Я не понимаю, почему он удаляет SSL? Вышеупомянутое отлично работает при тестировании в локальной среде (возможно, потому, что его http://localhost), но это всегда дает недопустимый URL-адрес перенаправления при попытке для доступа к любой ссылке, зашифрованной ssl.

-mm


person mmraj    schedule 19.08.2015    source источник
comment
ты решил эту проблему?   -  person Snake Eye    schedule 28.09.2015
comment
Извините, забыл обновить это. Я думаю, проблема заключалась в неправильных настройках балансировщика нагрузки AWS. Я решил эту проблему, выбрав следующие параметры для параметров прослушивателя балансировщика нагрузки: 443 и https для порта и протокола балансировщика нагрузки И 80 и https для порта и протокола экземпляра.   -  person mmraj    schedule 29.09.2015
comment
Порт 80 и HTTPS? хорошо, значит, вы также установили сертификат на экземпляр за ELB?   -  person Amir Mehler    schedule 04.11.2015
comment
Да, мы также инициировали сертификат на том экземпляре за ELB   -  person mmraj    schedule 12.11.2015
comment
так что теперь у вас это работает? у меня такая же проблема. Я использую nginx в качестве балансировщика нагрузки / обратного прокси   -  person marcusturewicz    schedule 13.06.2017
comment
Я столкнулся с той же проблемой. Кто-нибудь решил эту проблему? Я не использую SSL в экземпляре EC2, и мне не нужны эти накладные расходы (балансировщик нагрузки и последний экземпляр).   -  person Rigoni    schedule 02.10.2017


Ответы (2)


Вы должны добавить следующее свойство в json-файл конфигурации прокси (по умолчанию proxy.json) в качестве атрибута приложения (того же уровня, что и «adapter-config»):

"proxy-address-forwarding" : true,

Этот атрибут конфигурации не задокументирован, но присутствует в источниках конфигурации прокси: https://github.com/keycloak/keycloak/blob/master/proxy/proxy-server/src/main/java/org/keycloak/proxy/ProxyConfig.java

person ths    schedule 12.07.2016
comment
Я использую диаграмму управления для кубернетов, где это установлено, и я все еще пропускаю 's' в 'https'. Есть ли способ проверить? - person RAbraham; 16.05.2019

Вам не нужно устанавливать сертификат или вносить изменения в конфигурацию адаптера.

Это необходимо сделать в вашем standalone.xml, standalone-ha или domain.xml (в зависимости от обстоятельств), как описано в разделе обратного прокси документа Keycloak https://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy

Предполагая, что ваш обратный прокси-сервер не использует порт 8443 для SSL, вам также необходимо настроить, на какой порт будет перенаправляться HTTPS-трафик.

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
    ...
    <http-listener name="default" socket-binding="http"
        proxy-address-forwarding="true" redirect-socket="proxy-https"/>
    ...
</subsystem>

Добавьте атрибут redirect-socket к элементу http-listener. Значение должно быть proxy-https, которое указывает на привязку сокета, которую вам также необходимо определить.

Затем добавьте новый элемент привязки сокета к элементу группы привязки сокета:

<socket-binding-group name="standard-sockets" default-interface="public"
    port-offset="${jboss.socket.binding.port-offset:0}">
    ...
    <socket-binding name="proxy-https" port="443"/>
    ...
</socket-binding-group>
person Madhusudanan K K C    schedule 16.08.2018
comment
Таким образом вы выгружаете обработку https / ssl / tls на ваш балансировщик нагрузки / обратный прокси и по-прежнему используете https / ssl - person Madhusudanan K K C; 16.08.2018
comment
redirect-socket="proxy-https" делает свое дело - person Paramvir Singh Karwal; 18.02.2021