스프링 시큐리티를 사용한 로그인을 만들어보고 있는 도중, permitAll()을 사용하였지만 막히는 이슈가 발생하였다.
회원가입 창에서 회원가입을 하고 만들기 버튼을 누르면 같은 URL을 POST로 호출하도록 하였는데, 스프링 시큐리티에서 POST요청을 막아, 로그인 페이지로 이동함.
이러한 이유는 스프링 시큐리티에서는 기본적으로 CSRF(Cross-Site Request Forgery) 공격에 대한 보호 기능이 활성화되어있기 때문이다.
CSRF는 인터넷 이용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(등록, 수정, 삭제 등)를 특정 웹사이트에 요청하도록 만드는 공격이다.
따라서 .csrf( ).disable( ) 을 추가해주면 CSRF 방어 기능을 사용하지 않기 때문에 해당 이슈를 해결하는게 가능하지만..
음.. 이건 뭔가 석연찮다. 이러다가 진짜 공격을 당하면 어떡하지?
그래서 disable( ) 대신에 csrfTokenRepository를 사용하여 CSRF Token을 지정해주었다.
그러면 GET으로 호출할 경우, XSRF TOKEN이 쿠키로 묻게 된다.
이 쿠키값을 헤더에 붙이지 않고 그냥 POST로 호출할 경우에는
이와같이 로그인페이지를 호출한다.
(이는 스프링 시큐리티에서 formlogin을 설정하여 나오는 결과로, 로그인페이지를 아직 안만들어서 404에러가 뜬다)
그러나 X-XSRF-TOKEN이라는 Key값으로 쿠키값을 달아 POST로 조회하면 정상 호출을 하게된다.
(500뜨는건 내부에서 에러떠서 그럼.. JPA 설정이 잘못된듯..)
자세한 내용은 아래 사이트를 참조