Spring Security CSRF Отключить Не работает - PullRequest
0 голосов
/ 04 июля 2018

У меня есть приложение, которое использует Spring Security для аутентификации. Ранее мы использовали Spring Security 3.2.10 и теперь пытаемся перейти на 4.2.6. Весной 4 года защита от CSRF включена по умолчанию.

Я следую инструкции по миграции - https://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html

Когда я просто изменил пространство имен и заменил банки безопасности и попытался войти со страницы входа в систему, он выдал ошибку 404 для "/j_spring_security_check".

Согласно Руководству, я изменил действие входа в систему на «/ login» вместо «/ j_spring_security_check». Также изменил параметры имени пользователя и пароля на «имя пользователя» и «пароль» вместо «j_username» и «j_password», определенных на странице входа в систему.

 <form action="/login" method="POST">

После этих изменений я получаю ошибку, связанную с токеном CSRF, с кодом состояния 403-

 Type Status Report
 Message Could not verify the provided CSRF token because your session was 
 not found.
 Description The server understood the request but refuses to authorize it.

Я отключил защиту CSRF, добавив ниже в весенний конфигурационный файл безопасности -

  <security:http disable-url-rewriting="true" use-expressions="true">
    <security:csrf disabled="true"/>
    ..
    <security:intercept-url pattern="/login.jsp" 
    access="hasRole('ROLE_ANONYMOUS')"/>
    <security:form-login login-page="/login.jsp"
                         authentication-failure-url="/login.jsp? 
                         login_error=1"
                         default-target-url="/index.html" authentication- 
             success-handler-ref="successHandler" always-use-default- 
    target="true"/>
    <security:logout logout-success-url="/login.jsp"/>

Но все равно это не работает и выдает ошибку, связанную с CSRF со статусом 403 -

 Type Status Report
 Message Could not verify the provided CSRF token because your session was 
 not found.
 Description The server understood the request but refuses to authorize it.

Есть что-то, что я пропускаю?

1 Ответ

0 голосов
/ 04 июля 2018

Я наконец нашел проблему. На самом деле в нашем приложении A у нас есть список URI, которые могут обрабатываться этим приложением B, иначе он перенаправляет запрос в другое приложение.

Итак, ранее в этом списке была "j_spring_security_check". Но я пропустил добавление "/ login" в этот список.

В этом приложении B функция CSRF не была отключена, следовательно, она вызывала проблему.

...