일반 회원
OAuth 회원
어쨌든 refresh toekn을 사용하면 JWT 쓸껀데
그럼 일반 회원도 같이 JWT 사용하는 게 낫지 않을까?
그럼 기존에 세션에서 사용하던 모든 코드를 수정해야하므로 따로하는게 낫겠다.
remember-me 사용시에 발급은 잘 되는데
로그아웃할때 자동으로 쿠키가 사라져야하는데
사라지지 않고 무한 리다이렉트 발생.
무한 리다이렉트 발생이유가 remember-me 쿠키가 정상적으로 삭제되지 않아서 계속 로그인 상태를 유지해서이다.
실제로 로그아웃 한다음에 다시 url에 ROLE_USER만 갈 수 있는 /main 으로 접속하면 정상적으로 접속이 된다.
그래서 .deleteCookies("remember-me")
를 통해서 remember-me 쿠키를 삭제해줘야하는데 정상적으로 삭제가 안되는 문제 발생.
.deleteCookies("remember-me")
가 로그아웃 할 때, 정상적으로 작동 되도록 한다. 메소드 설명에 따르면 Allows specifying the names of cookies to be removed on logout success.
라고 나오는데 remember-me쿠키 설정을 추가했을때 로그아웃이 성공적으로 success 되지 않아서 deleteCookies가 작동하지 않는걸까?
먼저 로그아웃이 정상적으로 되어야하는데 remember-me가 남아있는거 보면 로그아웃 버튼을 눌렀을때 정상적으로 로그아웃이 안되는것 같다.
로그아웃 페이지를 누르면 intro페이지로 가야하는데 login페이지로 이동함 왜??
intro 로 가는 이유는, intro가 ROLE_ANONYMOUS만 가도록 되어있는데,
추측으로
new SecurityContextLogoutHandler().logout(request, response, SecurityContextHolder.getContext().getAuthentication());
여기에서 핸들을 제대로 못해서 로그아웃이 안되는것 같다.
@Override
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
Assert.notNull(request, "HttpServletRequest required");
if (this.invalidateHttpSession) {
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
if (this.logger.isDebugEnabled()) {
this.logger.debug(LogMessage.format("Invalidated session %s", session.getId()));
}
}
}
SecurityContext context = SecurityContextHolder.getContext();
SecurityContextHolder.clearContext();
if (this.clearAuthentication) {
context.setAuthentication(null);
}
}
마지막에 보면 context.setAuthentication(null)
인 부분이 있는데 null 된다음에 53번 라인에서 갑자기 authentication이 생김
데모버전이랑 비교해보자
데모버전이랑 비교하니까 문제점이 로그아웃할때 GET으로 하니까 remember-me 쿠키가 삭제가 안됨
Q1) 왜 그런걸까?
아마도 csrf랑 관계가 있는것 같다.
remember-me 가지고 /login 접근시 무한 리다이렉트 발생.
remember-me 토큰을 가지고 있을때 /
로 접근하면 main으로 가야되는데...
remember-me 토큰 없을땐 403받고 기존 페이지가 나옴