Недавно я уже писал статью об использовании Mysql в качестве Базы данных для Keycloak и все было хорошо, до тех пор пока я не поставил proxy на шлюзе к виртуальной машине с сервером авторизации, этот прокси также выполняет перенаправление HTTP траффика на HTTPS, т.е. сетевая схема выглядит так:
Доступ к серверу авторизации нужен снаружи, а сам сервер развернут на отдельной виртуальной машине.
После того как я запустил работу по такой схеме при входе в клонсоль управления, получил белый экран:
В результате я не могу зайти в консоль управления сервером авторизации по причине того, что не грузится скрипт с ошибкой blocked content. Как оказалось проблема заключается в том, что все файлы грузятся по HTTPS, а keycloak.js по HTTP и браузеры блокируют загрузку файлов по HTTP если остальные грузятся по HTTPS.
Для решения нужно выполнить 2 вещи:
1. Настроить proxy на Nginx, чтобы устанавливались правильные заголовки запросов
2. В конфигурационном файле keycloak - standalone/configuration/standalone.xml необходимо добавить опцию разрешающую перенаправление адреса
Настраиваем Nginx
server {
listen 80;
server_name auth.example.com;
return 301 https://auth.example.com$request_uri;
}
server {
listen 443;
ssl on;
server_name auth.example.com;
ssl_certificate /etc/nginx/ssl/example.com_bundle;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
location / {
proxy_pass http://192.168.156.10:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Access-Control-Allow-Origin *;
}
}
Данная настройка перенаправляет HTTP траффик на HTTPS, а HTTPS является Reverse Proxy для приложения, развернутого на виртуальной машине, основная задача - настроить хедеры (я их честно скопипастил с туториала, достаточно подробно описание этих заголовков можно посмотреть здесь). Не забываем рестартануть сервис nginx (system service nginx restart).
Настраиваем конфиг Keycloak
Для кейклока также придется провести небольшие манипуляции в файле standalone.xml (он расположен в директории standalone/configuration). Добавляем proxy-address-forwarding=true в тэге http-listener:
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" proxy-address-forwarding="true" />
...
</server>
В этом и заключается все настройка, рестарутем приложение (у меня оно установлено как сервис systemd, поэтому я использую тот же system service keycloak restart).