본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
안녕하세요 :)
오늘은 챌린지 32일차로, 이번 한 주도 끝나가네요ㅎㅎ (기분 좋음)
오늘 배울 내용은,
Part B. 스프링 시큐리티 심화
Ch 3. CSRF & CORS
"01. CSRF - 2" 입니다.

오늘은 웹 애플리케이션과 CSRF 보호에 대해 알아보는 시간을 가졌다. 웹 애플리케이션 환경에서 주로 CSRF 보호가 필요한데, 로그인 양식을 기반으로 하여 CSRF 토큰 값을 이용하는 방법과 페이지에서 POST 호출을 하는 방법에 대해 살펴보면 다음과 같다.
먼저 의존성인데, 스프링 시큐리티, 타임리프, 웹에 대한 의존성을 추가하면 된다.
다음으로 시큐리티 설정은 InMemoryUserDetailsManager 를 활용하고, NoOpPasswordEncoder 활용하여 모든 요청은 인증을 요구하도록 설정한다. formLogin 에서 로그인을 성공하면 /main 으로 리다이렉트 하게끔 설정한다.
다음으로 MainController 생성하는데, main.html 으로 랜딩될 수 있도록 GET /main 엔드포인트 생성한다.
main.html 은 메인화면을 나타내는 파일로 resources/templates 아래에 위치하며, input box 를 만들고 어떠한 값을 입력한 다음 버튼을 클릭해서 해당 값을 서버로 전달할 수 있도록 한다.
지금까지 적용한 코드에 대한 테스트 로컬에서 서버를 실행하고 localhost:8080 으로 접근 아이디와 패스워드를 입력하고 로그인을 시도한다.
지금까지 적용한 코드에 대한 테스트를 input box 에 값을 넣고 add 버튼을 클릭하면 whitelabel error page 로 랜딩된다. url 주소는 localhost:8080/add 로 노출된다. 에러 코드는 403 Forbidden 인데, 에러가 발생하는 이유는 현재 설정에서 CSRF 보호가 적용되어 있고, POST 엔드포인트를 호출하는 과정에서 별도의 CSRF 토큰 값을 전달하지 않았기 때문이다.
다음 시간에는 특정 경로에만 CSRF 보호를 적용하고 싶으면 어떻게 해야 할지 예시를 통해 알아보는 시간을 갖게 될 것 같다. 2개의 엔드포인트를 생성하고, 하나는 보호, 또 하나는 제외하도록 하려면 어떻게 해야 할지 다음 시간을 통해 배워보도록 해야겠다.