728x90
반응형
[스프링 시큐리티] 2. 기본 API 및 Filter 이해(Remember-me + JSESSIONID)
해당 포스팅은 인프런에서 스프링 시큐리티 정수원님의 강의를 참고하여 작성했습니다.
스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 인프런 | 강의
JSESSIONID
잠깐! 스프링 시큐리티 Remember-me
에 관한 포스팅 아닌가요?!
맞습니다.!
Remember-me
를 알기 위해서 간략하게 JSESSIONID
의 개념에 대해서 알아봅시다
스프링 부트는 내장 톰캣을 사용하는 것 알고 계신가요?!JSESSIONID
은 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키 입니다.
즉, 세션에서 사용되는 쿠키 이름입니다.
- 클라이언트가 서버에 요청 합니다.
- 클라이언트가 최초 요청했다고 판단하면
Tomcat
은JSESSIONID
를 발급 합니다. - 클라이언트로 전달된
JSESSIONID
값은 쿠키 형태로 사용자의 매번 요청 때마다 서버에 전달 됩니다. - 서버는 해당
JSESSIONID
값으로 동일한 사용자의 요청인지 판단하여 사용자 정보를 유지합니다.
Remember-me 인증
혹시 로그인 창에서 자동 로그인 체크박스를 경험하신적 있나요?
자동 로그인에 해당하는 부분이 바로 Remember-me
입니다.
스프링 시큐리티는 어떻게 제공하는지 알아봅시다.!
간략하게 Remember-me
기능을 소개하겠습니다.
- 세션이 만료되고 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는 기능
Remember-me
쿠키에 대한Http
요청을 확인한 후 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인 됩니다.- 사용자 라이프 사이클
- 인증 성공(
Remember-me
쿠키 설정) - 인증 실패(쿠키가 존재하면 쿠키 무효화)
- 로그아웃(쿠키가 존재하면 쿠키 무효화)
- 인증 성공(
SecurityConfig
@Configuration
@EnableWebSecurity // 웹 보안 활성화
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final UserDetailsService userDetailsService;
@overide
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated();
http
.formLogin();
http
.rememberMe() // remember-me 기능 동작
.rememberMeParameter("remember") //기본 파라미터명은 remember-me
.tokenValiditySeconds(3600) // default는 14일
.alwaysRemember(false) // true: remember-me 기능이 활성화 되지 않아도 항상 실행(default false)
.userDetailsService(userDetailsService);
}
}
MySecurityController
@RestController
public class MySecurityController {
@GetMapping("/")
public String index() {
return "home";
}
}
Remember-me 테스트
Remember-me
를 테스트 해봅시다.
Remember-me
를 체크하고 로그인 합니다.
EditThisCookie
를 통해 쿠키를 확인합니다.
JSESSIONID
쿠키를 삭제 합니다.
GET localhost:8080
후에 쿠키를 확인합니다.
Remember-me
쿠키로JSESSIONID
가 생성된것을 확인합니다.- 과거에 인증을 받은 사용자임을 인식!
JSESSIONID
,Remember-me
쿠키를 모두 삭제 합니다.GET localhost:8080
을 실행합니다.- 로그인 페이지로 이동하는 것을 확인 할 수 있습니다.
Remember-me
를 체크하지 않고 로그인 합니다.
Remember-me
쿠키가 생성되지 않는 것을 확인 할 수 있습니다.- 새롭게 인증을 받아
JSESSIONID
이 생성!
- 새롭게 인증을 받아
JSESSIONID
쿠키를 삭제 합니다.
GET localhost:8080
을 실행합니다.- 로그인 페이지로 이동하는 것을 확인 할 수 있습니다.
Remember-me 인증 과정
테스트 해보셨나요?!
🧙 스프링 시큐리티는 어떤 마법으로 remember-me
처리하는지 알아봅시다!
먼저 SecurityContext에 저장되어 있는 인증객체가 NULL인 경우 RememberMeAuthenticationFilter가 동작합니다.
728x90
반응형