본문 바로가기

TIL

[TIL] 🌱 2023.04.10 - 스프링 시큐리티 세션

🛹 목표

목표 난이도 달성 여부
이펙티브 자바 ITEM 12, 13, 14
- toString을 항상 재정의하라
- clone 재정의는 주의해서 진행하라
- Comparable을 구현할지 고려하라
😘 ✔️
패스트 캠퍼스 강의 듣기
😘 ✔️

📋 공부 내용 & 기록

1. 스프링시큐리티 Session 관리

세션 : 일정 시간(클라이언트가 웹브라우저를 통해 웹 서버에 접속한 시점부터 종료할 때까지) 동안 동일한 클라이언트로부터 들어오는 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술. 클라이언트가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라 칭한다.[참고]

 

쿠키 : 클라이언트의 정보를 컴퓨터 메모리에 저장

세션 : 클라이언트의 요청에 따른 정보를 컴퓨터 메모리가 아닌 웹 서버에서 저장되고 호출

 

세션 관리

protected void configure(HttpSecurity http) throws Exception {     
        http.sessionManagement()
                .maximumSessions(1)  // 최대로 허용 가능한 세션의 수
                .maxSessionsPreventsLogin(true)  // 생성 가능한 세션의 수를 넘었을 때 처리방법. true -> 현재 사용자 인증 실패, false -> 기본값, 기존 세션 만료
                .invalidSessionUrl("/invalid")  // 세션이 유효하지 않을 때 이동할 페이지 
                .expiredUrl("/expired ");  // 세션이 만료되었을 때 이동할 페이지
    }

세션 정책 설정

protected void configure(HttpSecurity http) throws Exception {
        http.sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
    }
  • ALWAYS - 세션이 존재하지 않는다면 항상 세션이 생성됨
  • IF_REQUIRED - 세션이 요구되면 세션이 만들어진다.(Default)
  • NEVER - 스프링 시큐리티가 스스로 세션을 만들지는 않지만, 이미 존재한다면  세션을 사용한다.
  • STATELESS - 스프링 시큐리티가 세션을 생성하지도, 사용하지도 않는다. (JWT에서 사용)
 

[Spring Security] 세션(Session) 관리

이번 Post에서는 세션에 관해 설정하는 방법에 대하여 알아보고자 합니다.

velog.io

SessionCreationPolicy.ALWAYS 일 때 발생할 수 있는 부작용 

  • 세션 과부하 : 세션 관리에 대한 부하가 증가할 수 있음, 세션은 메모리나 데이터베이스 등의 자원을 사용하므로, 세션 수가 많을 경우 시스템 자원 부족이나 성능 저하의 원인이 될 수 있다.
  • 보안 취약 : 세션 고정 공격(Session Fixation Attack)과 같은 보안 취약점이 발생할 수 있음. 세션 고정 공격은 공격자가 미리 생성한 세션을 클라이언트에게 강제로 부여하여, 공격자가 해당 세션으로 인증을 우회하는 공격. 따라서 세션을 생성할 때마다 새로운 세션 ID를 부여하거나, 기존 세션을 무효화 하는 등의 대책이 필요.
  • 세션 관리의 복잡성 증가 : 세션의 생성, 유지, 종료 등의 생명주기를 관리하는 복잡성이 증가.세션 관리는 세션 타임아웃 설정, 세션 클러스터링, 세션 저장소 설정 다양한 요소들이 포함되며, SessionCreationPolicy.ALWAYS 옵션을 사용할 경우 이러한 세션 관리에 대한 추가적인 설정과 관리가 필요할 있음.