[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 |