| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- Reflection
- 자바
- 스프링
- 스프링 시큐리티
- spring security
- BOJ
- CS
- 모던 자바 인 액션
- 알고리즘
- proxy
- 리플렉션
- Junit5
- 프록시
- test
- Python
- 최소 신장 트리
- Deadlock
- 모던자바
- 파이썬
- 객체지향
- 다이나믹 프록시
- OS
- java
- Spring
- 백준
- 문자열
- 약수
- MST
- redis
- 운영체제
Archives
- Today
- Total
Dev 달팽이 @_''
Spring Security - 동시 세션 제어/ 세션고정보호/ 세션 정책 본문
동시 세션 제어

동일한 계정으로 로그인 했을 경우, 스프링 시큐리티는 최대 세션 개수 허용 정책을 정할 수 있다.
- 이전 사용자 세션 만료 : 이전 사용자의 세션을 만료 시키는 방법이다. 사용자 1이 로그인해서 서버에서 세션을 생성해주고, 사용자 2가 같은 계정으로 로그인을 하면 세션을 생성해주는 동시에 이전 사용자 세션을 만료 설정을 한다. 다음 사용자 1이 링크에 접속하면 세션을 만료시킨다.
- 현재 사용자 인증 실패 : 현재 사용자 인증이 되어있는 상태라면 새로 들어온 인증에 대해 블럭을 시키는 방법이다. 사용자 1이 로그인을 하면 서버는 세션을 생성하고 사용자 2가 같은 계정으로 로그인을 하면 예외를 발생시킨다.
http.sessionManagement() : 세션 관리 기능이 작동함
SecurityConfig
@Override
protected void configure(HttpSecurity http) throws Exception {
// 인증 정책
http
.authorizeRequests()
.anyRequest().authenticated();
http
.formLogin();
http
.sessionManagement()
.invalidSessionUrl("/invalid") // 세션이 유효햐지 않을 때 이동 페이지
.maximumSessions(1) // 최대 허용 가능 세션 수, -1 : 무제한 로그인 세션 허용
.maxSessionsPreventsLogin(true) // 동시 로그인 차단, false : 기존 세션 만료(default)
.expiredUrl("/expired"); // 세션이 만료된 경우 이동 할 페이지
}

SecurityConfig
@Override
protected void configure(HttpSecurity http) throws Exception {
// 인증 정책
http
.authorizeRequests()
.anyRequest().authenticated();
http
.formLogin();
http
.sessionManagement()
.maximumSessions(1)
.maxSessionsPreventsLogin(false)
;
}

세션 고정 보호

- 공격자가 서버에 접속하면 서버는 공격자에게 세션 아이디를 부여함
- 공격자는 서버에게 받은 세션쿠키를 심어서 사용자에게 보냄
- 사용자는 공격자에게 받은 세션쿠키로 로그인을 시도
- 인증 성공
- 공격자와 사용자는 세션을 공유하기 때문에 모든 정보를 공유하고 있음
세션 고정 보호 : 인증이 성공할 때 마다 새로운 세션이 생성되고 새로운 세션 아이디를 발급하는 방법
http.sessionManagement() : 세션 관리 기능이 작동함

- none() : 세션 아이디를 고정. 공격자에 취약함.
- changeSessionId() : 매번 세션 아이디를 바꿈. 서블릿 버전 3.1 이상부터 dafault 값
- migrateSession() : changeSessionId와 마찬가지로 매번 세션 아이디를 바꿈. 서벌릿 버전 3.1 아래까지 default 값
- newSession() : 매번 새로운 세션을 만듬. 기존에 세션에 있는 정보도 모두 리셋됨.
세션 정책
http.sessionManagement() : 세션 관리 기능이 작동함

- ALWAYS : 스프링 시큐리티가 항상 세션 생성
- IF_REQUIRED : 스프링 시큐리티가 필요 시 생성(default)
- NEVER : 스프링 시큐리티가 생성하지 않지만 이미 존재하면 사용
- STATELESS : 스프링 시큐리티가 생성하지 않고 존재해도 사용하지 않음 (수정)
'Java&Spring > Spring Security' 카테고리의 다른 글
| Spring Security - SessionManagementFilter, ConcurrentSessionFilter (0) | 2022.06.22 |
|---|---|
| Spring Security - AnonymousAuthenticationFilter (0) | 2022.06.21 |
| Spring Security - RememberMeAuthenticationFilter (0) | 2022.06.21 |
| Spring Security - Remember me 인증 (0) | 2022.06.21 |
| Spring Security - Logout, LogoutFilter (0) | 2022.06.21 |