Почтальон заблокирован защитой Spring Boot CSRF - PullRequest
1 голос
/ 24 марта 2020

У меня есть приложение Spring Boot, которое использует куки для защиты CSRF. Я знаю, что это работает, но в Почтальоне я не могу заставить PUT, POST или DELETE работать. Я использую Interceptor.

Я ожидаю, что файлы cookie отправляются: XSRF-TOKEN=becb9b23-3fe5-4ff9-ba4c-338baea968c3;, что совпадает со значением XSRF-Token ответа: becb9b23-3fe5-4ff9-ba4c-338baea968c3, поэтому я не знаю, почему запрос блокируется.

Я знаю, что проблема в CSRF, потому что, если я отключу его, Postman будет работать, как и ожидалось.

Я также знаю, что CSRF работает, потому что я построил для него тесты:

  @WithMockUser(authorities = TEST_AUTHORITY_ACCESS)
  @Test
  public void testPostSomething() throws Exception {
    mvc.perform(post("/something").content(TEST_BODY).with(csrf()))
        .andExpect(status().isOk());
  }

  @WithMockUser(authorities = TEST_AUTHORITY_ACCESS)
  @Test
  public void testPostSomethingWithoutCsrf() throws Exception {
    mvc.perform(post("/something").content(TEST_BODY))
        .andExpect(status().is4xxClientError());
  }

Итак, если в основном отправляется правильный код ie и защита CSRF работает, как и ожидалось, почему мой запрос все равно блокируется?

Конфигурация безопасности (WebSecurityConfigurerAdapter):

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
        // ...
        .csrf().ignoringAntMatchers("/login").csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and()
        // ...
  }

Сообщение об ошибке, которое я получаю в Почтальоне:

{
    "timestamp": "2020-03-24T11:19:00.324+0000",
    "status": 403,
    "error": "Forbidden",
    "message": "Forbidden",
    "path": "/something"
}
...