[Spring Security] 세션 제어하기

2024. 1. 4. 23:37백엔드/Spring Boot

# 동시 세션 제어 API에 대하여 알아보자

  • invalidSessionUrl() : 세션이 유효하지 않을 때 이동할 페이지 경로 
  • maximumSessions() : 최대로 허용 가능한 세션 수, -1 : 무제한으로 허용
  • maxSessionsPreventsLogin(true) : 최대 동시 접속 허용 세션 수를 초과한 경우 인증 실패 처리
  • maxSessionsPreventsLogin(false) : 최대 동시 접속 허용 세션 수를 초과한 경우 인증 기존 세션 만료 처리 
  • expiredUrl() : 세션이 만료된 경우 이동 할 페이지 경로 
http.sessionManagement(
    (session) -> session
            // 동시 세션 제어
            .invalidSessionUrl("/invalid") // 세션이 유효하지 않을 때 이동 할 페이지
            .maximumSessions(1) // 최대 허용 가능 세션 수 , -1 : 무제한 허용
            .maxSessionsPreventsLogin(true) // 최대 동시 접석 허용 세션 수를 초과한 경우 동시 접속 차단
            .expiredUrl("/expired") // 세션이 만료된 경우 이동 할 페이지
);

 

 

 

 

# 세션 고정 보호에 대하여 알아보자

세션이 고정되어 인증에 사용되는 경우 공격자가 Session ID를 획득하여 세션에 접근 할 수 있게 되어 사용자로 위장하여 서버에 접근이 가능하다. 이를 방지하기 위해 스프링 시큐리티는 세션 고정 보호를 위한 설정 api를 제공한다. 

  • sessionFixation().changeSessionId() : 사용자가 인증을 성공할 때 마다 Session ID를 변경, Servlets 3.1 이상 버전의 기본값
  • sessionFixation().migrateSession() : Servlets 3.0 이하 버전의 기본값
  • sessionFixation().newSession() : 사용자가 인증을 성공하게되면 새로운 세션을 생성 👉 기존 세션 정보들을 사용할 수 없음
  • sessionFixation().none() : 세션 고정 보호 기능을 사용하지 않음 👉 세션 고정 공격에 취약해짐
http.sessionManagement(
    (session) -> session
        // 세션 고정 보호
        .sessionFixation().changeSessionId()

);

 

 

 

 

# 세션 정책

  • sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) : 스프링 시큐리티가 필요 시 생성, 기본값 
  • sessionCreationPolicy(SessionCreationPolicy.Always) : 스프링 시큐리티가 항상 세션을 생성 
  • sessionCreationPolicy(SessionCreationPolicy.Never) : 스프링 시큐리티가 생성하지는 않지만 이미 존재하면 사용 
  • sessionCreationPolicy(SessionCreationPolicy.Stateless)
    : 스프링 시큐리티가 생성하지 않고 존재해도 사용하지 않음. EX. JWT 사용 
// 세션 제어
http.sessionManagement(
    (session) -> session
        // 세션 정책 
        .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) // Always, if_Required, Neber, Stateless

);

 

 

 

# SessionManagementFilter에 대하여 알아보자 

  • 세션 관리 : 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리
  • 동시적 세션 제어 : 동일 계정으로 접속이 허용되는 최대 세션수를 제한
  • 세션 고정 보호 : 인증을 할 때마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지
  • 세션 생성 정책 설정 

 

 

전체 코드

http.sessionManagement(
    (session) -> session
        // 세션 정책
        .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)

        // 세션 고정 보호
        .sessionFixation().changeSessionId()

        // 동시 세션 제어
        .invalidSessionUrl("/invalid") // 세션이 유효하지 않을 때 이동 할 페이지
        .maximumSessions(1) // 최대 허용 가능 세션 수 , -1 : 무제한 허용
        .maxSessionsPreventsLogin(true) // 최대 동시 접석 허용 세션 수를 초과한 경우 동시 접속 차단
        .expiredUrl("/expired") // 세션이 만료된 경우 이동 할 페이지

);

 

 

 

 

 

 

 

Reference

인프런 '스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security' - 정수원

 

스프링 시큐리티 강의 - 인프런

초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과

www.inflearn.com

 

 

'백엔드 > Spring Boot' 카테고리의 다른 글

SOLID 원칙  (2) 2024.01.10
디자인 패턴과 SOLID 원칙  (3) 2024.01.09
[Spring Security] AnonymousAuthenticationFilter  (1) 2024.01.04
[Spring Security] Remember Me 구현하기  (0) 2024.01.04
[Spring Security] Logout 구현하기  (1) 2024.01.04