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


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

20854Как дешёвые Android-смартфоны превращаются в чужие прокси? 20853В Индии имя звонящего появится на экране вместе с номером 20852Как проверить готовность команды к звонку с клонированным голосом? 20851Уязвимости MarkLogic: делегированные права могли открыть путь к администраторскому... 20850Как GitHub закрыл лазейку, угрожавшую тысячам npm-пакетов? 20849Hirudo подменяет банковские приложения, чтобы обойти их защиту 20848Как Vghost превратил старую ошибку Linux в путь к root? 20847Уязвимости в PAN-OS и Cisco Secure Email Gateway уже используют атакующие 20846Как уязвимость GitLab могла открыть сервер для чужого кода? 20845Уязвимость SAP Cloud SDK могла отправить OAuth2-секреты злоумышленнику 20844Уязвимость в Nextcloud открыла путь к веб-оболочкам на серверах 20843Смогут ли малые ИИ-модели превратить бытовую технику в ботнет? 20842Пять уязвимостей NGINX: кому грозит риск и как закрыть его 20841Тайный диктофон в OpenAI: что утверждают следователи 20840Как проверять уязвимость входа, не заходя дальше дозволенного?
Ссылка