Использование Keycloak за обратным прокси: не удалось открыть страницу входа администратора из-за смешанного содержимого
Таким образом, у меня есть проблема с тем, чтобы keycloak 3.2.1 работал за kong (0.10.3), обратным прокси на основе nginx.
Сценарий таков:
Я вызываю keycloak через мой шлюз-маршрут через https://{gateway}/auth
, и он показывает мне точку входа с логотипом keycloak, ссылку на консоль администратора и т. д. - пока все хорошо.
Но при нажатии на консоль администрирования - > вызов https://{gateway}/auth/admin/master/console/
, keycloak пытается загрузить свой css / js через http (см. screenie ниже), который мой браузер блокирует из-за смешанного контента.
I поискал вокруг и нашел этот поток: конфигурация сервера keycloak apache с проблемами "смешанного контента" , которые приводят к этому РЕПО github: https://github.com/dukecon/keycloak_postgres_https
С этого момента я попытался интегрировать его cli в мой dockerfile с успехом (не изменил содержимое файлов, а просто скопировал их в мое РЕПО и добавил/запустил их из dockerfile). Это мой dockerfile прямо сейчас:
FROM jboss/keycloak-postgres:3.2.1.Final
USER root
ADD config.sh /tmp/
ADD batch.cli /tmp/
RUN bash /tmp/config.sh
#Give correct permissions when used in an OpenShift environment.
RUN chown -R jboss:0 $JBOSS_HOME/standalone &&
chmod -R g+rw $JBOSS_HOME/standalone
USER jboss
EXPOSE 8080
К сожалению, моя проблема все еще существует:
Итак, у меня пока нет идей, и я надеюсь, что вы могли бы мне помочь:
-
Как мне сказать keycloak, чтобы он вызывал свои css-файлы через https здесь?
-
Должен ли я что-то изменить в сценарии cli?
Вот содержание сценария:
Config.sh:
#!/bin/bash -x
set -e
JBOSS_HOME=/opt/jboss/keycloak
JBOSS_CLI=$JBOSS_HOME/bin/jboss-cli.sh
JBOSS_MODE=${1:-"standalone"}
JBOSS_CONFIG=${2:-"$JBOSS_MODE.xml"}
echo "==> Executing..."
cd /tmp
$JBOSS_CLI --file=`dirname "$0"`/batch.cli
# cf. http://stackoverflow.com/questions/34494022/permissions-error-when-using-cli-in-jboss-wildfly-and-docker
/bin/rm -rf ${JBOSS_HOME}/${JBOSS_MODE}/configuration/${JBOSS_MODE}_xml_history/current
И пакет.cli:
embed-server --std-out=echo
# http://keycloak.github.io/docs/userguide/keycloak-server/html/server-installation.html
# 3.2.7.2. Enable SSL on a Reverse Proxy
# First add proxy-address-forwarding and redirect-socket to the http-listener element.
# Then add a new socket-binding element to the socket-binding-group element.
batch
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=proxy-address-forwarding,value=true)
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=redirect-socket,value=proxy-https)
/socket-binding-group=standard-sockets/socket-binding=proxy-https:add(port=443)
run-batch
stop-embedded-server
Также может быть интересно, что kong развертывается на openshift с маршрутом, использующим перенаправление с http на https ("insecureEdgeTerminationPolicy": "перенаправление").
2 ответа:
Это звучит как-то похоже на дубликат Докера Keycloak позади loadbalancer с https fails
Задайте заголовки запросов
X-Forwarded-For
иX-Forwarded-Proto
в nginx. Затем вы должны настроить Keycloak (Wildfly, Undertow) для совместной работы с обратным прокси-сервером SSL (он же балансировщик нагрузки). Видишь http://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy для подробного описания.Суть в том, что nginx завершает SSL и пересылает запросы в Keycloak как чистый http. Поэтому Keycloak/Wildfly необходимо сказать, что входящие http запросы от nginx должны обрабатываться так же, как они были https.
Добавьте заголовки
X-Forwarded-For
иX-Forwarded-Proto
(Как сказал Бумер) во всех вышестоящих балансировщиках нагрузки и убедитесь, что они достигают сервера Keycloak.X-Forwarded-For
должен быть домен вашего ключевого ключа, который направляет к LB иX-Forwarded-Proto
должен быть протокол (в большинстве случаев https).В качестве последнего шага вам нужно изменить файл
standalone.xml
илиstandalone-ha.xml
и добавить атрибутproxy-address-forwarding="true"
в элемент<http-listener>
под<server>
.Если вы используете Docker, вы можете использовать
PROXY_ADDRESS_FORWARDING
environment var из исходного контейнера Keycloak для установки этот атрибут.