728x90
서론
jwt로 로그인은 구현한 적이 많지만, 로그아웃을 구현해본 적이 없다는 걸 깨달았다!
로그아웃 시에는 프론트쪽에서 jwt토큰을 버리면 되는 게 아닌가 생각했지만, 프론트와 얘기를 하다보니 로그아웃을 통해 토큰을 무효화 시키는 것도 필요하다는 걸 알았다. 그래서 jwt 로그아웃을 구현하는 방법들을 적어보려고 한다.
jwt토큰은 쿠키나 세션과 달리 강제로 만료시킬 수 없다. 디비 저장없이 토큰을 만료시키는 방법은 유효시간이 끝날 때까지 기다리는 것밖에 없다. 그러므로 서버에서 로그아웃을 구현하려면 다른 아이디어가 필요하다.
로그아웃을 구현하는 4가지 방법
1. 토큰의 유효시간을 아주 짧게 설정
- 사용자가 로그아웃을 누르기 전에 유효시간이 다 되게 만드는 방법ㅋㅋ
- 유효시간이 다 되면 자동으로 로그아웃 되는 효과가 있다
- 토큰 유효시간이 너무 빨리 끝나면 사용자가 화가날 수 있기 때문에 좋은 방법은 아닌 것 같다
2. 토큰 블랙리스트 사용
- 로그아웃을 요청한 사용자들의 토큰값을 블랙리스트 데이터베이스에 저장한다
- 토큰 유효시간이 만료된 친구들은 데이터베이스에서 삭제하면 됨
- 모든 토큰의 정보를 저장하는 것보단 디비부담이 덜 할 것이다.
3. 모든 토큰을 db에 저장하여 토큰 로그인 상태를 검증
- 로그인 요청 시 해당 토큰이 db테이블에 있는지 확인하고, 있으면 로그인을 진행시킨다
- 로그아웃을 요청하면 해당 토큰을 삭제한다
- 블랙리스트와 반대 개념이라고 생각하면 될듯
- 디비 부담이 커져서 session대신 jwt를 사용하는 장점이 없어진다
4. 토큰을 인메모리 db에 저장
- 모든 토큰을 Redis같은 인메모리 db에 저장하는 방법
- 로그아웃 시 토큰 정보를 Redis에서 지운다
- jwt 로그아웃이라고 구글링했을 때 사람들이 가장 많이 사용하는 방법인 것 같았다
이번에는 가장 간단한 방법인 토큰 블랙리스트를 사용해보려고 한다. Redis도 다음에 사용해봐야겠다.
728x90
'Backend > Spring' 카테고리의 다른 글
The server timezone is <???ѹα? ǥ?ؽ> that's unknown, trying to use system default timezone (4) | 2024.04.21 |
---|---|
[Spring] 클라이언트의 ip를 가져오는 방법(HttpServletRequest) (0) | 2023.08.13 |
[Spring] REST API 버전을 관리하는 이름짓기 (0) | 2023.07.24 |
[Spring] 인프런 tdd 수업3 - 상품조회 기능 tdd (0) | 2023.07.15 |
[Spring] 인프런 tdd 수업2 - api테스트로 변환 (0) | 2023.07.15 |