Страницы Spring Security не открываются в Iframe Chrome - PullRequest
0 голосов
/ 24 марта 2020

Я использую SpringBoot, springsecurity и jdk 1.8. Когда я пытаюсь открыть любую защищенную страницу thymleaf в iframe на Chrome, он каждый раз переориентирует меня на страницу входа. Он отлично работает на firefox и IE. И когда я пытаюсь открыть тот же URL без iframe, он работает нормально. Я уже дал много времени, чтобы решить, но смог решить. Ниже приведен мой весенний код безопасности. Еще одна вещь, оба домена разные.

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .headers()
                .frameOptions().disable()
                .and()
                .csrf().disable()/*disbaling csrf here*/
                .authorizeRequests()
                .antMatchers("/","/login","/css/**", "/js/**", "/fonts/**","/img/**").permitAll()/*do not use spring security on this path*/
                .and()
                .formLogin()
                .successHandler(successHandler) /*after success login on web we are handling the success event*/
                .permitAll()
                .and()
                .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login/?logout") /*defining logout and login url here*/
                .permitAll()
                 /*
                 * This is for authentication failure handling
                 * */
                 http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint)
                 /*Token based authentication we are handling here*/
                 http.addFilterBefore(new StatelessAuthenticationFilter(tokenAuthenticationService), BasicAuthenticationFilter.class);
                 http.addFilterAfter(new SameSiteFilter(), BasicAuthenticationFilter.class)
    }

Может кто-нибудь, пожалуйста, помогите мне в этом?

1 Ответ

1 голос
/ 25 марта 2020

Для начала я бы посоветовал вам не отключать заголовок "X-Frame-Options" и не использовать ваше приложение в iframe.
Это создает угрозу безопасности, о которой вы можете прочитать подробнее в этом ответе .

Теперь, чтобы объяснить поведение, которое вы видите.
Spring Security использует Session cook ie для хранения сеанса пользователя.
Файлы cookie связаны с доменами, например, если, например, если с доменом stackoverflow.com связан повар ie, то этот повар ie будет включен в любой запрос к stackoverlow.com.

Чтобы контролировать это поведение, файлы cookie также имеют атрибут называется SameSite.
Атрибут SameSite может иметь 3 значения: None, Lax, Strict или может быть не задан и не иметь значения.
Когда значение None, оно ведет себя так, как описано выше (включено во все запросы).
Если значение Lax, то повар ie будет включен только в навигацию верхнего уровня GET запросы.

Session cook ie, который использует Spring Security не устанавливает атрибут SameSite.
В настоящее время (март 2020 г.) некоторые браузеры, такие как Firefox и Edge, обрабатывают атрибут unset так же, как None.
Однако Chrome экспериментируя с обработкой атрибута unset так же, как Lax.
Подробнее об этом можно прочитать в Chrome Статус платформы .

В итоге, при использовании Chrome Session cook ie обрабатывается так, как будто для SameSite установлено значение Lax.
Поскольку рендеринг приложения в iframe не является навигацией верхнего уровня, Session cook ie не включен в запрос от iframe, и приложение не может знать, что пользователь вошел в систему.

Вы можете явно установить атрибут SameSite в None, используя Spring Session.
Опять же, я бы предостерег от этого, так как это может сделать ваше приложение уязвимым для CSRF и атак с использованием clickjacking.
Если после рассмотрения последствий для безопасности вы считаете необходимым установить атрибут SameSite равным None, вы может сделать это по inc привлекая Spring Session в ваши зависимости и создавая custom CookieSerializer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...