У меня есть приложение 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"
}