프로그래밍

[프로그래밍] JWT - Refresh Token 관리에 대해

K.Seungmin 2024. 8. 7. 14:56

프로젝트를 진행하면서 회원 관리에 JWT 토큰 방식을 사용하게 되었습니다. 이때 Refresh Token을 어떻게 관리해야 더 효율적이고 보안상 안전할까에 대해 고민해 보았습니다.

 

Access Token과 Refresh Token 

먼저 JWT 토큰 방식을 사용하게 되면 access token과 refresh token을 듣게 됩니다. Access Token은 사용자가 다른 페이지로 이동하거나 페이지에서 요청을 진행할 때 리소스에 접근하기 위해 사용되는 토큰입니다. 그래서 access token은 유효 기간이 refresh token에 비해 짧습니다. 여기서 refresh token의 기능은 access token이 만료되었을 때 access token을 재발급시켜주는 역할을 합니다. 이때 access token과 refresh token의 만료 기간은 본인 이용하는 프로젝트 종류에 따라 알맞게 설정해주어야 합니다.

 

Refresh Token 관리 방법

1. 서버에 저장

  • 방식 : 데이터베이스에 저장하고, 클라이언트가 토큰을 갱신할 때 서버에서 검증하는 방식입니다.
  • 장점 : 서버에서 토큰을 관리함으로 토큰 철회가 용이합니다.
  • 단점 : 데이터베이스 작업이 필요하며, 스케일링 이슈가 발생할 수 있습니다.
스케일링 이슈 : 시스템이나 애플리케이션이 많은 사용자가 동시에 접속할 때 성능 저하나 응답 지연 등의 문제가 생기는 것.

 

2. 클라이언트에 저장

  • 방식 : 클라이언트의 안전한 저장소(secure cookie, localStorage)에 저장합니다.
  • 장점 : 서버 부하를 줄일 수 있습니다.
  • 단점 : 클라이언트에서 토큰이 탈취 당할 가능성이 있습니다.

3. 쿠키에 저장

  • 방식 : HTTP only 속성이 설정된 쿠키에 저장하여 클라이언트 측 스크립트로 접근하지 못하게 합니다.
  • 장점 : XSS 공격에 대한 방어력을 갖추게 됩니다.
  • 단점 : CSRF 공격에 취약할 수 있으므로 추가적인 방어책이 필요합니다.
XSS 공격 : 공격자가 악성 스크립트를 웹 애플리케이션에 주입하여 다른 사용자의 브라우저에서 실행되게 하는 공격.
CSRF 공격 : 사용자가 의도하지 않은 요청을 보내도록 해서 사용자가 이미 인증된 상태를 악용하는 공격.


보안적 측면에서 고려할 방법

  1. HTTPS 사용
  2. 토큰 만료 시간 설정
  3. 토큰 철회 시스템
  4. IP 및 디바이스 제한
  5. 로그인 알림 및 이중 인증 (2FA)
  6. 토큰의 최소 권한 원칙