토큰 블랙리스트를 어디까지 해야할까?

김민준·2023년 11월 29일
0

로그아웃 기능을 만들다가 고민에 빠졌다.

  1. 로그아웃을 한 뒤에 이미 블랙리스트에 오른 토큰으로 로그아웃 요청을 또 하여도 여전히 블랙리스트에 같은 토큰을 추가한다.
    → 블랙리스트에 추가하기전에 한번 검색하여 해결
  2. 다시 비슷한 문제로 존재하지 않는 토큰에 대해서 블랙리스트에 추가를 요청하면 그대로 들어가는 문제 발견
    두가지 생각이 있다.
    1. 막을 필요 없다 : 어짜피 프론트에서 없는 엑세스 토큰으로 로그아웃 요청을 할리가 없다.
    2. 막아야한다 : 의도적으로 가짜 토큰을 만들어서 내 서비스의 헛점을 찾으려하거나 DB값으로 금전전 공격을 할 수 도 있다.
    거기에 이미 블랙리스트에 있는 토큰인지 없는 토큰인지 확인했다면 여기까지 가도된다..

평소에도 DB조회를 한번 더하는 비용 vs 어쩌다한번 이상한 놈한테 걸려서 DB에 부하(?)가 걸리는것 어느게 더 비싼걸까?에 대한 생각과 팀원과의 토론이 필요하다.

2023 11 30 추가

  1. 블랙리스트라는 테이블을 따로 관리하기 보다는, 엑세스, 리프레시 토큰의 테이블에 isWithdrawl이라는 컬럼을 추가했다.
  2. 두 토큰의 jti가 같기 때문에 로그아웃 요청을 할때 jti만 받게 만들었다.
  3. 이렇게해서 테이블을 하나 줄여서 테이블간의 참조가 줄어들었고, 실제로 존재하는 토큰인지, 이미 무효화된 토큰인지 확인하는 과정이 매우 빨라졌다.
profile
node 개발자

0개의 댓글

관련 채용 정보