[TIL] 삼성 시그니처: 토큰 블랙리스트 도입
ISSUE 1. refresh Token 블랙리스트를 어떻게 적용해야할까?
❓문제상황
- 공통 프로젝트에서 인증/인가를 진행할때는 jwt를 발급하고 해제하는 작업만했었다.
- refresh token의 만료기간이 길기때문에 access token이 만료되었더라도 refresh token이 탈취된다면? 그 기간만큼 유저의 인증을 사용할 수 있다.
- 이러한 문제점을 해결하기 위해
블랙리스트
를 추가하려고한다.
❗해결방법
1. 로직
- 로그인
- access token과 refresh token발급 후 클라이언트에게 전달
- 이때 refresh token은 redis에 저장한다
- redis의 캐싱을 통해 refresh token의 만료시간만큼 저장하도록 하였다.
- key,value로 조회시간이 짧기 때문에 db에 조회하는 것보다 인메모리에서 불러오기 때문에 I/O시간이 짧다고 판단
api 요청
- access token이 유효한지 확인
- 유효하지 않다면 refresh token 재발급진행
- 재발급시 refresh token이 유효한지 확인하기 위해서는 redis에 등록되었는지 확인
- redis에 없을 경우 refresh token이 유효하지 않다고 판단
로그아웃
- access token, refresh token 모두 만료기한이 남았지만 탈취되었을 경우 만료기간이 지날때까지 해커가 사용할 수있다.
- access token은 블랙리스트에 저장
- refresh token은 redis에서 삭제
access token 재발급
- refresh token 모두 만료기한이 남았지만 탈취될 수 있다.
- 기존 refresh token은 redis에서 삭제
- 새로운 refresh token을 발급하고 redis에 저장
2. 결론
- access token 만료 → 사용불가
- access token이 만료되지 않았지만 redis에 있다 → 사용불가
- refresh token이 만료 → 사용불가
- refresh token이 만료되지 않았지만 redis에 없다 → 사용불가
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.