백엔드/Spring

[Spring] JWT 블랙리스트 전략

kwang2134 2025. 4. 21. 16:57
728x90
반응형
728x90

블랙리스트란?

더 이상 유효하지 않다고 판단된 JWT 토큰을 별도의 저장소 (DB, Redis 등)에 저장해 놓고, 이 토큰이 사용되는 요청을 차단하는 방식입니다.

JWT는 기본적으로 서버가 상태를 저장하지 않기 때문에 일반적으로는 발급된 토큰이 만료되기 전까지는 유효하다고 간주됩니다. 블랙리스트를 도입함으로써 만료되기 전 토큰을 강제로 무효화할 수 있게 됩니다.


📌 Access Token 블랙리스트 전략

Access Token은 보통 짧은 만료 시간을 갖고 있으며 요청마다 첨부되어 리소스에 접근하는 데 사용됩니다.

 

등록 방식

  • 로그아웃 시 또는 토큰 탈취가 감지되었을 때 해당 토큰을 블랙리스트에 저장
  • 클라이언트가 요청을 보낼 때마다 블랙리스트를 조회하여 해당 토큰이 유효한지 확인

장점

  • 탈취된 토큰이라도 블랙리스트에 등록되어 있다면 사용을 차단할 수 있음
  • 유저가 로그아웃하거나 계정이 해킹된 경우 즉시 차단 가능
  • 평균적으로 Access Token의 만료 시간이 짧아 DB 메모리 내 보관 시간이 짧음 → 메모리 공간 차지가 덜함

⚠️ 단점

  • Access Token은 요청마다 사용되기 때문에 매 요청마다 블랙리스트 저장소에 접근해야 함 → 성능 저하
  • 사용자 수가 많고 요청이 빈번할수록 블랙리스트 조회가 시스템 병목이 될 가능성이 있음

📌 Refresh Token 블랙리스트 전략

Refresh Token은 보통 긴 만료 시간을 갖고 있으며 Access Token을 갱신하는 데 사용됩니다.

 

등록 방식

  • 로그아웃 또는 이상 행위 감지 시, 해당 Refresh Token을 블랙리스트에 등록
  • 새로운 Access Token을 발급할 때만 블랙리스트를 확인하고 등록되어 있지 않다면 Access Token 발급

장점

  • Refresh Token은 Access Token에 비해 비교적 덜 사용되므로 블랙리스트 확인(DB 접근) 비용이 적음
  • 해킹 시에도 리프레시 과정에서 차단 가능 → 실제 만료 이전 강제 만료

⚠️ 단점

  • Refresh Token이 블랙리스트에 올라갔다고 해도 이미 발급된 Access Token은 유효 → Access Token은 자연 만료
  • Refresh Token의 탈취는 막을 수 있으나 Access Token이 탈취된 경우 만료 시간 전까지 차단 불가
  • Access Token에 비해 만료 시간이 길기 때문에 블랙리스트 DB에 데이터로 머물게 되는 기간이 상대적으로 김 → 메모리 공간 차지가 많아질 수 있음

비교

전략 장점 단점 메모리 효율 성능 영향
Access Token 탈취 대응 가능, 짧은 TTL -> 공간 효율적 요청마다 블랙리스트 조회 필요 좋음 (짧은 생명주기) 높음
Refresh Token  요청 빈도 낮음, 갱신 시만 확인 오래 남아 있음 -> 공간 차지 큼 낮음 (긴 생명주기) 낮음

 


전략 선택 기준

🔐 보안이 매우 중요한 시스템

  • Access Token 블랙리스트 적용
    • 탈취 시 즉시 무효화 가능
    • 사용자 로그아웃, 기기 강제 로그아웃 등 요구사항 충족
    • Redis 등 인메모리 저장소로 성능 보안
    • 토큰 TTL 짧게 설정
  • 보안 > 성능 → 유출 시 금전적 손해가 발생할 수 있는 시스템

💻 보안보다 성능과 확장성이 더 중요한 시스템

  • Refresh Token 블랙리스트 적용
    • Access Token은 TTL을 짧게 설정해 자연 만료로 해결
    • Refresh Token은 블랙리스트로 관리해 성능 저하 방지
    • 대부분 Refresh Token 차단으로 충분한 경우
  • 성능 > 보안 → 트래픽이 많은 오픈 플랫폼

💡 혼합 전략

  • 기본적으로 Refresh Token만 블랙리스트 처리
  • Access Token도 위험 상황에서만 블랙리스트 등록
728x90