인프런 커뮤니티 질문&답변

망고123님의 프로필 이미지

작성한 질문수

스프링 시큐리티 완전 정복 [6.x 개정판]

Rest 인증 보안 및 화면 구성

REST 방식과 폼 인증 방식의 차이점과 언제 적용하는 질문입니다.

해결된 질문

작성

·

325

0

타임 리프로 페이지를 구성한다면 CSRF 토큰을 타임리프에서 자동으로 생성하기 때문에 직전 세션인 [실전 프로젝트 - 회원 인증 시스템] 강의 내용으로 스프링 시큐리티 설정이 충분하지만,

타임 리프가 아닌 자바스크립트 기반의 뷰나 리액트 등으로 페이지를 구성할 때에는 [실전 프로젝트 - 비동기 인증] 으로 스프링 시큐리티를 설정해야 되는 것으로 생각하면 될까요?

그 이유는 CSRF 토큰을 자바스크립트에서는 자동으로 생성하지 않기 때문이다. 라고 이해했는데 다른 이유가 혹시 더 있을까요?

답변 2

1

정수원님의 프로필 이미지
정수원
지식공유자

네 잘 이해하셨습니다.

csrf 토큰은 서버에서 생성되고 세션 및 요청 객체에 저장되기 때문에 클라이언트에서 이 토큰을 참조하여 서버와 통신해야 합니다.

자바스크립트에서는 쿠키로 생성된 토큰을 읽거나 아니면 메타 태크를 사용해서 참조할 수 있습니다.

강의에 나와 있으니 참고해 주시기 바랍니다.

1

안녕하세요, 인프런 AI 인턴입니다.

맞습니다, 망고123님. 타임리프와 같은 서버 사이드 템플릿 엔진을 사용할 경우, 자동으로 CSRF 토큰을 생성하고 관리해주는 기능이 포함되어 있어 추가적인 설정 없이도 CSRF 보호를 손쉽게 활성화할 수 있습니다. 하지만 자바스크립트, 뷰, 리액트와 같은 클라이언트 사이드에서 동작하는 SPA(Single Page Application)를 구성하는 경우에는 CSRF 토큰을 직접 관리해주어야 합니다. 이런 경우, SPA와 API 서버 간의 상호작용에서 보안을 강화하기 위해 스프링 시큐리티 설정을 적절히 조정해야 합니다.

스프링 시큐리티에서 CSRF 보호는 기본적으로 활성화되어 있으며, 이는 서버에 변경을 가할 수 있는 요청(예: POST, PUT, DELETE)에 대해 서버와 클라이언트 간 토큰을 이용하여 요청이 정당한지 검증하는 과정을 포함합니다. 클라이언트 사이드에서 자바스크립트를 통해 API를 호출할 때 이 CSRF 토큰을 요청에 포함시켜 보안을 강화하는 것입니다.

따라서, 자바스크립트나 SPA를 사용하는 경우에도 스프링 시큐리티의 CSRF 보호 기능을 유지하려면, 클라이언트 측에서 CSRF 토큰을 적절히 처리할 수 있도록 추가적인 구현이 필요합니다. 이는 일반적으로 API 요청 시 헤더에 CSRF 토큰을 포함시키거나, 쿠키를 사용하는 방식으로 이루어질 수 있습니다.

추가적으로, 스프링 부트 애플리케이션에서 CSRF 보호를 디폴트로 활성화하고 있음을 알려주는 내용이 스프링 부트 참조 문서에 명시되어 있습니다. 해당 문서에 따르면, CSRF 보호는 기본적으로 켜져 있으며, 비브라우저 클라이언트를 위한 서비스를 생성하는 경우에만 비활성화하는 것을 권장합니다.
Spring Boot Reference Documentation - CSRF Protection

이 정보가 망고123님의 질문에 대한 답변이 되었기를 바랍니다.