У меня есть приложение Spring Boot 2.1.0.RELEASE.Я пытаюсь понять конфигурацию входа в систему и конфигурацию CSRF, поэтому я сначала отправляю запрос GET:
GET http://localhost:8080/devices
Accept: application/json
Authorization: Basic user test
Повторное выполнение с полученным JSessionID также работает:
GET http://localhost:8080/devices
Accept: application/json
#Authorization: Basic user test
cookie: JSESSIONID=162A7A29081CC89EA444423D9508F286
Пока все хорошо.Я получил 200 ответов и получил токен CSRF.Последнее:
HTTP/1.1 200
Set-Cookie: XSRF-TOKEN=2adcabdd-d804-4f13-a2a6-b95621ce868c; Path=/
....
Хорошо, теперь я хочу попробовать POST-запрос напрямую:
POST localhost:8080/devices/check
Content-Type: application/json
#Authorization: Basic user password
cookie: JSESSIONID=162A7A29081CC89EA444423D9508F286; XSRF-TOKEN=2adcabdd-d804-4f13-a2a6-b95621ce868c
#X-XSRF-TOKEN: 2adcabdd-d804-4f13-a2a6-b95621ce868c
Но независимо, если я попытаюсь передать маркер XSRF через Cookie или Header,Я получу 403 Запрещено.
Это моя конфигурация Spring Security:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository
.withHttpOnlyFalse()).and()
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic().and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
Что я здесь не так делаю?
Fyi: Я отправляю запросы сHTTP-клиент IntelliJ.