Почему я получаю неверный токен csrf? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть проект с Spring-Cloud-Security. Это сервер авторизации для авторизации oauth. В прошлом все работало нормально.

Я добавляю пружинный профиль для поддержки ssl с настройкой:

security:
  require-ssl: true
server:
  ssl:
    key-store: dev.p12
    key-store-password: devpass
    keyStoreType: PKCS12
    keyAlias: calc

С этим профилем аутентификация работает нормально, но когда я отключаю его и захожу в систему через http, аутентификация ломается.

o.s.security.web.csrf.CsrfFilter         : Invalid CSRF token found for http://localhost:8090/login

Как я могу это исправить?

1 Ответ

0 голосов
/ 23 марта 2019

На вашем сервере включена CSRF . Аннотация @EnableWebSecurity активирует CSRF по умолчанию, как указано в документации .

Защита CSRF включена по умолчанию в конфигурации Java.

Существует два способа это исправить: отключить CSRF или отправить CSRF-токен при выполнении действий PATCH, POST, PUT и DELETE.

Чтобы отключить CSRF, сделайте это в конфигурации Spring Security

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();
  }
}

Чтобы отправить CSRF-токен, вы должны включить его в запрос к серверу (в этом примере JSP с отправкой POST запроса)

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}" method="post">
  <input type="submit" value="Log out" />
  <input type="hidden" name="${_csrf.parameterName}"
    value="${_csrf.token}"/>
</form>

Все примеры взяты из документации Spring Подделка межсайтовых запросов (CSRF)

Пожалуйста, примите во внимание рекомендацию Spring при рассмотрении вопроса об отключении CSRF

.

[...] использовать защиту CSRF для любого запроса, который может быть обработан браузер обычными пользователями. Если вы только создаете сервис, который используемые клиентами без браузера, вы, вероятно, захотите отключить CSRF защита.

...