Ssylka

Интеграция Spring Cloud Gateway с Keycloak для веб-приложений

Spring Cloud Gateway, выступая в роли BFF (Backend for Frontend), обеспечивает безопасную аутентификацию и авторизацию для веб-приложений, перенося логику OAuth 2.0/OIDC на бэкенд. Вместо хранения токенов на фронтенде, токены access, refresh и id хранятся в http-сессии на стороне шлюза, а веб-приложение использует cookie для идентификации сессии. Такой подход делает шлюз приватным OAuth клиентом, что повышает безопасность.
Интеграция Spring Cloud Gateway с Keycloak для веб-приложений
Изображение носит иллюстративный характер

Для интеграции необходимы spring-boot-starter-oauth2-client, spring-cloud-starter-gateway, spring-session-data-redis, spring-session-core. Шлюз настраивается как OAuth2 клиент с использованием WebFlux spring security, обеспечивая поддержку PKCE для защиты. Для хранения OAuth2AuthorizedClient, объектов авторизации, используется WebSessionServerOAuth2AuthorizedClientRepository, который сохраняет их в веб-сессии. Разлогин реализован через OidcClientInitiatedServerLogoutSuccessHandler (для oidc) и DelegatingServerLogoutHandler, который удаляет SecurityContext, очищает сессию и удаляет cookie.

Конфигурация application.yaml включает настройки провайдера Keycloak, client-id, client-secret, тип авторизации и scopes. Шлюз добавляет фильтр TokenRelay для перенаправления запросов с access токеном на защищенные ресурсы, включая CORS настройки. Контроллеры AuthInfoController обеспечивают получение токенов access и id по cookie из сессии.

Защищенный ресурс, например тестовое приложение, настраивается как oauth2 ресурсный сервер, проверяющий JWT токены. После аутентификации через шлюз, запросы к защищенному ресурсу успешны, а сессии в keycloak регистрируются. Разлогин корректно удаляет сессию как на стороне шлюза, так и в keycloak, удаляя cookie. Важно правильно настроить время жизни сессии и рефреш токена и убедиться, что сессии keycloak и шлюза согласованы по времени жизни, чтобы исключить зависание сессий.


Новое на сайте

18884Знаете ли вы, что приматы появились до вымирания динозавров, и готовы ли проверить свои... 18883Четыреста колец в туманности эмбрион раскрыли тридцатилетнюю тайну звездной эволюции 18882Телескоп Джеймс Уэбб раскрыл тайны сверхэффективной звездной фабрики стрелец B2 18881Математический анализ истинного количества сквозных отверстий в человеческом теле 18880Почему даже элитные суперраспознаватели проваливают тесты на выявление дипфейков без... 18879Шесть легендарных древних городов и столиц империй, местоположение которых до сих пор... 18878Обзор самых необычных медицинских диагнозов и клинических случаев 2025 года 18877Критическая уязвимость CVE-2025-14847 в MongoDB открывает удаленный доступ к памяти... 18876Научное обоснование классификации солнца как желтого карлика класса G2V 18875Как безграничная преданность горным гориллам привела Дайан Фосси к жестокой гибели? 18874Новый родственник спинозавра из Таиланда меняет представления об эволюции хищников Азии 18873Как новая электрохимическая технология позволяет удвоить добычу водорода и снизить... 18872Могут ли ледяные гиганты Уран и Нептун на самом деле оказаться каменными? 18871Внедрение вредоносного кода в расширение Trust Wallet привело к хищению 7 миллионов... 18870Проверка клинического мышления на основе редких медицинских случаев 2025 года