레디스(Remote Dictionary Server)는 Key-Value의 비정형 데이터로 구성해 저장/관리하기 위한 오픈소스 비관계형 데이터베이스 관리 시스템입니다. 2015년부터 Redis Labs가 지원하고 있으며, 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS입니다. BSD 라이센스를 따르며, DB-Engines.com 월간 랭킹에 따르면 Redis는 가장 인기 있는 Key-Value 저장소입니다 (출처: [Redis] Redis 개념, AWS EC2환경에서 설치하기)
토큰 인증 방식은 세션 인증 방식에 비해 확장에 용이함
단, 세션 방식과 달리 JWT는 서버 쪽에서 로그아웃을 할 수 없음 = 한 번 발급된 JWT 토큰은 무효화시킬 수 없음
→ 방법1) JWT 토큰 주기를 짧게 하거나,
방법2) 로그아웃 기능 구현을 위해 토큰을 DB에 보존하고 매 요청 시마다 로그아웃으로 인해 DB에서 삭제된 토큰이 아닌지 검사
시간을 정해 데이터를 날릴 수 있는 RAM 기반의 데이터베이스(Redis 등)를 사용해서 만드는 blacklist = 기 발급된 access token 및 refresh token을 무효화 → 이제부터는 사용 불가능
토큰의 payload(subject)의 타입(type)
ATK/RTK 구분 → RTK + /account/reissue url로 요청받은 경우 ATK 재발급 = RTK의 payload에서 user의 email을 꺼내고, Redis 인메모리에 해당 user가 존재(안)하는지 확인해서 결정 → TokenResponse에 새로운 ATK를 넣어 응답access token은 발급된 이후, 서버에 저장x, 토큰 자체로 검증하며 사용자 권한 인증
JWT 토큰이 유효한지, 유효한 상태에서 로그아웃 시도했는지 등을 모두 처리해야 함
방법3) 사용자의 편의
보다 정보를 지키는 것이 더 중요
한 웹 애플리케이션은 Refresh Token을 사용하지 않는 곳이 많음(출처: 유어클래스 JWT란?)
[self-managed Redis]
[managed Redis]
(출처: [입 컨설팅] Self Managed Redis 가 좋을까? Managed Redis 가 좋을까?)