Интеграция 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 и шлюза согласованы по времени жизни, чтобы исключить зависание сессий.


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

19164Уязвимые обучающие приложения открывают доступ к облакам Fortune 500 для криптомайнинга 19163Почему ботнет SSHStalker успешно атакует Linux уязвимостями десятилетней давности? 19162Microsoft устранила шесть уязвимостей нулевого дня и анонсировала радикальные изменения в... 19161Эскалация цифровой угрозы: как IT-специалисты КНДР используют реальные личности для... 19160Скрытые потребности клиентов и преимущество наблюдения над опросами 19159Академическое фиаско Дороти Паркер в Лос-Анджелесе 19158Китайский шпионский фреймворк DKnife захватывает роутеры с 2019 года 19157Каким образом корейские детские хоры 1950-х годов превратили геополитику в музыку и... 19156Научная революция цвета в женской моде викторианской эпохи 19155Как новый сканер Microsoft обнаруживает «спящих агентов» в открытых моделях ИИ? 19154Как новая кампания DEADVAX использует файлы VHD для скрытой доставки трояна AsyncRAT? 19153Как новые китайские киберкампании взламывают госструктуры Юго-Восточной Азии? 19152Культ священного манго и закат эпохи хунвейбинов в маоистском Китае 19151Готовы ли вы к эре коэффициента адаптивности, когда IQ и EQ больше не гарантируют успех? 19150Иранская группировка RedKitten применяет сгенерированный нейросетями код для кибершпионажа
Ссылка