본문 바로가기
Framework/Spring Framework

[Spring Boot] Spring Security 세션 인증 정책 예제

by 사용자 원동호 2021. 5. 7.

동시 세션 제어

  • 이전 사용자 세션 만료
  • 현재 사용자 인증 실패
@Override
protected void configure(HttpSecurity http) throws Exception {
   // 세션 관리 기능 작동
   http.sessionManagement()
	   .maximumSessions(1) // 최대 허용 가능 세션 수, -1 : 무제한 로그인 세션 허용
	   .maxSessionsPreventsLogin(true) // 동시 로그인 차단, false : 기존 세션 만료(defualt)
	   .invalidSessionUrl("/invalid") // 세션이 유효하지 않을 때 이동할 URL
	   .expiredUrl("/expired") // 세션이 만료된 경우 이동할 URL
}

 

세션 고정 보호

@Override
protected void configure(HttpSecurity http) throws Exception {
	http.sessionManagement()  // 세션 관리 기능 작동
		 .sessionFixation().changeSessionId() // 기본 값
}

공격자가 사용자의 쿠키값을 변경해도 사용자 인증 성공 시 JSESSIONID값을 변경하기 때문에 공격자가 인증된 JSESSIONID값으로 요청해도 인증되지 않는다.

  • changeSessionId() : 서블릿 3.1이상에서 사용하는 기본 값.
  • migrationSession : 서블릿 3.1 이하에서 사용하는 기본 값.
  • newSession() : 세션ID, JSession모두 새로 생성함.
  • none : 아무것도 설정하지 않음.

 

세션 정책

@Override
protected void configure(HttpSecurity http) throws Exception {
	http.sessionManagement()  // 세션 관리 기능 작동
		.sessionCreationPolicy(SessionCreationPolicy.If_Required)
}
  • SessionCreationPolicy.Always : 스프링 시큐리티가 항상 세션 생성.
  • SessionCreationPolicy.If_Required : 스프링 시큐리티가 필요 시 생성(기본값).
  • SessionCreationPolicy.Never : 스프링 시큐리티가 생성하지 않지만 이미 존재하면 사용.
  • SessionCreationPolicy.Stateless : 스프링 시큐리티가 생성하지 않고 존재해도 사용하지 않음.
  • → EX) JWT

댓글0