@Configuration
@EnableWebSecurity(debug = true)
public class SecurityConfig {
//비밀번호 암호화
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http.authorizeHttpRequests().anyRequest().permitAll();
return http.build();
}
}
일단 간단히 테스트 하기 위해 저런식으로 모든 request에 permitAll을 걸고 postman으로 진행을 하였지만, 이상한 결과가 나왔다.
결국 찾아낸 문제점은 바로 csrf()이다. 옛날에 spring security를 공부할 때 공부했었는데, 이 문제 때문일 줄이야..
https://iseunghan.tistory.com/302
간단하게 복습할겸 간단하게 정리하자면
Cross-Site Request Forgery 의 약자이다.
일단 기본 전제 조건은
쉽게 말하면 사용자가 정상적으로 발급받은 쿠키는 브라우저에 저장되어있다. 그리고 악성 사용자가 만든 악성 코드를 클릭함으로 인해 쿠키와 함께 원치 않는 요청이 전송된다.
Spring Security의 경우 HTTP POST, PUT, DELETE, PATCH 에 대해 기본적으로 CSRF를 적용하도록 되어있다. 이는 토큰 방식으로 작동한다.
GET의 경우 서버를 변경시키지 않으므로 기본적으로는 적용시키지 않지만, 설정을 통해 적용시킬 수 있다.
그래서 POST Man을 통해 전송을 할 때 이 토큰이 포함되어있지 않아 403 Forbidden을 내보낸 것이다.
해결하는 방법은 csrf를 disable 시키면 된다.
@Configuration
@EnableWebSecurity(debug = true)
public class SecurityConfig {
//비밀번호 암호화
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http.csrf().disable();
http.authorizeHttpRequests().anyRequest().permitAll();
return http.build();
}
}