Refresh Token을 redis에 저장한 이유?
2024. 1. 26. 14:50ㆍProject
petree의 jwt흐름도
Refresh Token을 Redis에 저장한 이유?
- Redis는 key-value쌍으로 데이터를 관리할 수 있는 data storage이다. DB가 아닌 data storage라고 표현하지 않은 이유는 기본적으로 Redis는 in-memory로 데이터를 관리하므로, 저장된 데이터가 영속적이지 않기 때문이다.
- 이때 in-memory란?
- 이러한 Redis에 Refresh Token을 저장하기에 적합하다고 생각한 이유는 다음과 같다.
- RT를 RDB등에 저장하면, 스케줄러등을 이용해 주기적으로 만료된 토큰을 만료처리하거나 제거해야한다. 하지만, Redis는 기본적으로 데이터의 유효시간을 지정할 수 있다.
- 물론 jwt와 같은 클레임 기반 토큰을 사용하면, RT를 서버에 저장할 필요가 없지만, 사용자 강제 로그아웃 기능, 유저 차단, 토큰 탈취시 대응을 해야한다는 가정으로 Redis에 RT를 저장하도록 구현하였다.
Petree서비스의 자세한 구현내용은 다음과 같다.
- 사용자가 로그인에 성공하면, (key:유저아이디, value:RT)를 기반으로 Redis에 저장하도록 하였다. 이후, 사용자는 유효한 AT를 기반으로 API를 요청하도록 하였다.
- 사용자가 만료된 AT를 기반으로 API를 요청하는 경우, RT를 이용하여 AT를 새롭게 발급하도록 구현하였다.
- 사용자가 로그아웃에 성공하면, AT를 Redis의 블랙리스트에 저장하도록 구현하였다.
- 혹여나 클라이언트가 블랙리스트에 있는 토큰을 요청한다면 인증실패하도록 구현하였다.
- 참조블로그
'Project' 카테고리의 다른 글
타임라인 구현 방법 2가지 (pull mode, push model) (0) | 2024.02.23 |
---|---|
오프셋 기반 페이지네이션 vs 커서기반 페이지네이션 (0) | 2024.02.22 |
QueryDSL을 도입한 이유 (0) | 2024.01.25 |
XSS? (1) | 2024.01.24 |
cookie, session, jwt (0) | 2024.01.16 |