refresh token은 브라우저, 클라이언트단에 저장하지 않는다.(서버 관점엔 response로 보내지 않는다.)
브라우저에서 사이트 최초 접근시, 쿠키 or localstorage의 access token의 유효함을 서버에 확인하고, (/api/user/reissue)
브라우저 access token 미존재(undefined or null) ⇒ 해당 브라우저로 로그인한 적이 없음
access token 유효
access token 만료, 관계되는 refresh token 유효
else {
// access token 30분, refresh token 2주
// 로그인한지 31분 후 들어옴,
// 재발행을 해서 refresh token 2주 + 31분
// 2주안에 들어오기만 하면, 그 시점부터 다음 2주도 자동로그인이 가능하다. 연장해주는거야
val data = tokenRepository.getDataByAccessToken(token);
if (jwtTokenProvider.validateToken(data.refreshToken)) {
// access token는 만료, refresh token는 유효
// data.id를 대상으로 access token, refresh token을 재발행 해주는거지
val newToken = ~~~~~;
Authentication authentication = jwtTokenProvider.getAuthentication(newToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
else {
// 로그인, 회원가입 페이지로 이동
}
}
access token 만료, 관계되는 refresh token 만료
리팩토링 관련
endpoint = controller method name = service method name
필요한 기능
케이스