
예전에 프로젝트에서 Security를 맡았던 기억이 있는데,
그땐 logout의 경우 인증 정보를 강제로 없앴다
(따로 요청 없이 프론트에서 인증 정보를 없애버렸다..)
여튼 logout을 하는데 왜 request와 response가 둘 다 필요한 지 이해가 안 가 찾아보니..

request는 서버 쪽을 관리한다면
response로 클라이언트 측 쿠키나 사애를 정리하게 해야한다.
-
SecurityContextHolder.getContext().getAuthentication(): 현재 인증된 사용자의 인증 객체를 가져옵니다.
-
logout(request, response, authentication): 세션 종료, 컨텍스트 정리, 쿠키 삭제 등을 수행합니다.
request와 response를 둘 다 넘기는 이유는 Spring Security가 로그아웃을 완벽히 처리하기 위해 서버 측(세션)과 클라이언트 측(응답)을 모두 제어해야 하기 때문입니다. 이는 HTTP 프로토콜의 특성과 보안 요구사항을 충족하기 위한 설계입니다. 만약 세션만 종료하고 응답을 조작하지 않으면, 클라이언트 측에 남아있는 쿠키나 상태로 인해 보안 문제가 발생할 수 있습니다.
예전에 토큰 방식으로 교환해서 엑세스 토큰 및 리프레쉬 토큰의 유효 기간이 명확하다고 생각해
로그아웃 방식에 대한 위험성을 느끼지 못했는데, 생각하고 찾아본 결과
3가지 문제점
- 탈취 시 토큰 만료 전까지 공격자가 사용 가능
- 클라이언트 의존성 증가
- 계정 해킹 시 연결을 끊고 싶어도 만료까지 대기
사실 logout은 필수로 구현하는 것이 맞는데 그 부분을 간과한 거 같다..
'프로젝트' 카테고리의 다른 글
블로그 만들기 - 환경변수 dotenv으로 관리 (0) | 2025.03.30 |
---|---|
블로그 만들기 - controller test (ObjectMapper) (0) | 2025.03.29 |
블로그 만들기 - jwt TokenProvider 테스트 오류 (0) | 2025.03.26 |
블로그 만들기 - Spring security - CSRF (0) | 2025.03.04 |
블로그 만들기 (0) | 2025.03.01 |