Keycloak считает, что к нему пришли по HTTP
Предупреждения Keycloak «Non-secure context detected; cookies are not secured» и «Likely misconfiguration detected. When using an edge proxy, you must use proxy-headers»: Keycloak за обратным прокси не знает, что снаружи HTTPS. Вход зацикливается или падает в части браузеров.
Что это значит
Keycloak работает за обратным прокси: nginx или балансировщик принимает HTTPS и передаёт запрос дальше по HTTP. Если Keycloak не настроен доверять заголовкам прокси, он видит обычный HTTP и выдаёт cookie без признака Secure. Современные браузеры такие cookie не отправляют в межсайтовых POST-запросах, а на них построена часть сценариев входа (ответ провайдера через форму, вход из другого приложения). Пользователь видит повторную страницу входа или ошибку после ввода пароля.
Второе предупреждение Likely misconfiguration detected. When using an edge proxy, you must use proxy-headers прямо подсказывает, чего не хватает.
Как проверить
- С какой схемой Keycloak сам себя называет:
curl -s https://sso.example.ru/realms/<realm>/.well-known/openid-configuration | jq -r .issuer
Если в ответе http://, Keycloak не знает про HTTPS снаружи.
- Передаёт ли прокси заголовки
X-Forwarded-Proto,X-Forwarded-HostиX-Forwarded-For, или стандартныйForwarded. - Параметры запуска Keycloak:
proxy-headers,hostname,http-enabled.
Что сделать
- Включить разбор заголовков прокси:
--proxy-headers=xforwarded(илиforwarded, если прокси шлёт стандартный заголовокForwarded). - Задать внешний адрес полностью:
--hostname=https://sso.example.ru. - Проверить, что прокси передаёт заголовки и перезаписывает их, а не дописывает к тем, что прислал клиент.
- После перезапуска убедиться, что
issuerвopenid-configurationначинается сhttps://.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать