Токен Spring webflux csrf хранится в веб-сеансе

Поскольку токен csrf в spring webflux хранится в WebSession, требует ли это включения липких сеансов в конфигурации с балансировкой нагрузки?


person mahanhz    schedule 15.04.2018    source источник


Ответы (1)


Вам не обязательно нужна обработка закрепленных сеансов на балансировщике нагрузки. Если вы используете Spring Session, вы можете перенести хранилище сеансов в какое-то центральное хранилище данных, например Редис. В этом случае каждый узел вашего приложения может получить доступ к одним и тем же данным сеанса, даже если запросы одного и того же сеанса отправляются на разные узлы.

person Georg Wittberger    schedule 15.04.2018
comment
Ты прав. Я должен был расширить свой вопрос, заявив, что хочу избежать необходимости поддерживать свою сессию с помощью db или redis, что фактически исключает Spring Session. В этом случае мой единственный выход - использовать липкие сеансы. Верно? - person mahanhz; 15.04.2018
comment
Единственное децентрализованное решение, которое напрямую поддерживается Spring Session, — это Hazelcast. Но нет удобной автоматической настройки, чтобы заставить его работать для реактивной WebSession. Однако вы можете использовать распределенную карту в репозитории сеансов: docs.spring.io/spring-session/docs/2.0.2.RELEASE/reference/ Тем не менее, если вам действительно не нужно центральное хранилище сеансов, а также вы хотите избежать закрепления сеансов, вы должны передавать состояние сеанса клиенту (например, sessionStorage в браузере). - person Georg Wittberger; 16.04.2018
comment
Между прочим, если защита CSRF — это все, что вам нужно, есть решение на основе файлов cookie, которое позволяет вам сохранять сервер без состояния: docs.spring.io/spring-security/site/docs/5.0.4.RELEASE/ - person Georg Wittberger; 16.04.2018
comment
Я использую безопасность webflux, и csrfTokenRepository принимает ServerCsrfTokenRepository, а не CsrfTokenRepository. Существует только одна реализация ServerCsrfTokenRepository — WebSessionServerCsrfTokenRepository. Во всяком случае, я получил очень полезный ответ, чтобы репликация сеанса hazelcast работала с Spring WebFlux. Так что теперь у меня есть репликация сеанса в памяти, что я и искал все это время. - person mahanhz; 16.04.2018
comment
@mahanhz для справки, существует проблема github с запросом CookieServerCsrfTokenRepository для webflux. github.com/spring-projects/spring-security/issues/4932 - person Hartmut; 24.07.2018