1. 동시 세션 제어
: 동일한 계정으로 인증을 받을 떄 생성되는 세션의 개수가 허용 개수를 초과할 경우 어떻게 세션 유지할지 제어하는 것
최대 세션 허용 개수 초과 시 -> 시큐리티에서 2가지 전략을 제공합니다.
1. 이전 사용자 세션 만료
: 새로운 사용자에게 세션 생성, 이전(기존) 사용자의 세션을 만료시킵니다.
2. 현재 사용자 인증 실패
: 이전(기존) 사용자의 세션을 유지시키고, 새로운 사용자의 인증예외를 발생시킵니다.
사용 방법)
http.sessionManagement() : 세션 관리 기능이 작동
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement()
.maximumSessions(1) // 최대 허용 가능 세션 수, -1 : 무제한 로그인 세션 허용
.maxSessionsPreventsLogin(true) // 동시 로그인 차단, false : 기존 세션 만료(default)
.invalidSessionUrl("/invalid") // 세션이 유효하지 않을 대 이동 할 페이지
.expiredUrl("/expired") // 세션이 만료된 경우 이동 할 페이지
1번 전략 : .maxSessionsPreventsLogin(false) 사용시 기존 사용자 세션 만료
2번 전략 : .maxSessionsPreventsLogin(true) 사용시 새로운 사용자 인증예외 발생
exception : Maximum sessions of 1 for this principal exceeded
2. 세션 고정 보호
세션 고정 공격을 방지하기 위해서 시큐리티는 세션 고정 보호 기능을 제공합니다.
사용자는 공격자가 심어놓은 쿠키로 인증을 하더라도 인증을 할 떄 마다 새로운 세션이 생성됩니다.
사용방법)
http.sessionManagement()
.sessionFixation().changeSessionId(); // 기본 값 (서블릿 3.1 이상의 기본 값)
// 새로운 세션 할당, 기존 세션의 모든 어트리뷰트가 새로운 세션으로 이동한다. (서블릿 3.1 이하의 기본 값)
//.sessionFixation().migrateSession()
// 새로운 세션 생성, 기존 세션의 모든 어트리뷰트는 새로운 세션으로 옮겨지지 않는다.
//.sessionFixation().newSession() // 새로운 세션 생성
// 설정해제, 공격에 방치된다.
//.sessionFixation().none();
3. 세션 정책
사용방법)
http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
//.sessionCreationPolicy(SessionCreationPolicy.ALWAYS)
//.sessionCreationPolicy(SessionCreationPolicy.NEVER)
//.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
}
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) : 스프링 시큐리티가 필요 시 생성(기본 값)
.sessionCreationPolicy(SessionCreationPolicy.ALWAYS) : 스프링 시큐리티가 항상 세션 생성
.sessionCreationPolicy(SessionCreationPolicy.NEVER) : 스프링 시큐리티가 생성하지 않지만 이미 존재하면 사용
.sessionCreationPolicy(SessionCreationPolicy.STATELESS) : 스프링 시큐리티가 생성하지도 않고 존재해도 사용하지 않음
'Spring Security' 카테고리의 다른 글
[Security] Success/Failure Handler Custom (인증성공, 인증실패 핸들러 커스텀) (2) | 2021.12.28 |
---|---|
[Security] 세션 제어 필터 : SessionManagementFilter, ConcurrentSessionFilter (0) | 2021.12.09 |
[Security] Remember Me 인증 필터 (RememberMeAuthenticationFilter) (0) | 2021.10.05 |
[Security] Logout 처리 필터 (LogoutFilter) (0) | 2021.10.04 |
[Security] Form Login 인증 필터 (UsernamePasswordAuthenticationFilter) (0) | 2021.10.04 |