트러블 슈팅 - JWT 로그아웃 기능

Zyoon·2025년 6월 10일

트러블슈팅

목록 보기
3/11
post-thumbnail

📓뉴스피드 API Github

JWT 로그아웃 기능

최초 설계

  • 프론트엔드 없이 백엔드만 구현하던 초기에는 Access 토큰을 제어하기 어렵다고 판단
  • 따라서 Refresh 토큰만 쿠키와 DB에서 삭제하는 방식으로 로그아웃을 처리하였다

문제점

  1. 토큰의 역할이 불명확해짐
    • Access 토큰은 원래 인증/인가에 사용되어야 하며
    • Refresh 토큰은 Access 토큰 재발급에만 사용되어야 함
    • 그러나 초기 설계에서는 Refresh 토큰이 인증에도 사용되는 구조가 되어 보안적으로 부적절했다
  2. 인증 흐름의 혼란성
    • 실질적으로 인증이 Refresh 토큰 중심으로 동작하여, 만료, 유효성, 로그아웃 처리 등에서 의도치 않은 동작이 발생할 수 있는 구조였다

해결

  1. 토큰 저장 위치 분리
    • Access 토큰: Authorization 헤더에 저장
    • Refresh 토큰: 쿠키에 저장
  2. 인증 방식 개선
    • 인증 및 인가는 Access 토큰만 사용
    • 필터에서 Access 토큰의 유효성, 만료, 무효 여부를 검사
  3. 로그아웃 처리 방식 변경
    • Refresh 토큰
      • 클라이언트의 쿠키에서 제거
      • 서버의 DB에서도 삭제
    • Access 토큰
      • 로그아웃 시 해당 토큰을 Blacklist DB에 저장
      • 이후 인증 필터에서 Blacklist에 등록된 토큰인지 검사
      • 등록되어 있다면 유효하지 않은 토큰으로 간주하여 인증 실패 처리
profile
기어 올라가는 백엔드 개발

0개의 댓글