Refresh 토큰 서버측 저장

원승현·2024년 7월 21일

Spring Security

목록 보기
17/17
post-thumbnail

서버측 주도권

단순하게 JWT를 발급하여 클라이언트측으로 전송하면 인증/인가에 대한 주도권 자체가 클라이언트 측에 맡겨진다.

JWT를 탈취하여 서버측으로 접근할 경우 JWT가 만료되기 까지 서버측에서는 그것을 막을 수 없으며, 프론트측에서 토큰을 삭제하는 로그아웃을 구현해도 이미 복제가 되었다면 피해를 입을 수 있다.

이런 문제를 해결하기 위해 생명주기가 긴 Refresh 토큰은 발급시 서버측 저장소에 기억 후 기억되어있는 Refresh 토큰만 사용할 수 있도록 서버측에서 주도권을 가질 수 있다.

구현 방법

  • 발급시
    • Refresh 토큰을 서버측 저장소에 저장
  • 갱신시 (Refresh Rotate)
    • 기존 Refresh 토큰을 삭제하고 새로 발급한 Refresh 토큰을 저장

토큰 저장소 구현

  • 토큰 저장소
    RDB 또는 Redis와 같은 데이터베이스를 통해 Refresh 토큰을 저장한다. 이때 Redis의 경우 TTL 설정을 통해 생명주기가 끝이난 토큰은 자동으로 삭제할 수 있는 장점이 있다.

Refresh 토큰 저장소에서 기한이 지난 토큰 삭제
TTL 설정을 통해 자동으로 Refresh 토큰이 삭제되면 무방하지만 계속해서 토큰이 쌓일 경우 용량 문제가 발생할 수 있다.
따라서 스케줄 작업을 통해 만료시간이 지난 토큰은 주기적으로 삭제하는 것이 올바르다.

참고자료: 개발자 유미 스프링 JWT 심화

0개의 댓글