Access Token
사용자 인증 및 리소스 접근을 위해 발급되는 단기 토큰이다.
Access Token의 특징으로 유효기간이 짧아서 짧은 유효기간 덕분에 토큰이 탈취돼도 피해 최소화할 수 있다.
Refresh Token
Access Token 발급 이후, 토큰의 유효기간이 끝났을 때 Access Token을 재발급하기 위해 사용되는 장기 토큰이다. 만료된 Access Token을 서버에 보내면, 서버는 같이 보내진 Refresh Token을 DB에 있는 것과 비교해서 일치하면 다시 Access Token을 재발급하는 원리이다. 로그아웃 시에는 저장소에서 Refresh Token을 삭제하여 사용이 불가능하도록 하고 새로 로그인하면 서버에서 다시 재발급해서 DB에 저장한다.
JWT 토큰 관리 전략
Refresh Token 무효화
- 로그인 시, Refresh Token은 서버 DB에 저장됨
- 로그아웃 또는 재발급 시, 기존 Refresh Token을 삭제하거나 무효화 함)
Access Token 관리
- 유효기간 짧게 설정(Access Token의 유효 기간을 짧게 설정하여 탈취 시 피해를 최소화)
- 보안 전송(Access Token은 민감한 정보이므로 HTTPS를 통해 암호화된 전송을 보장)
- HttpOnly 쿠키 사용(클라이언트 측 저장 방식으로 HttpOnly 및 Secure 속성을 가진 쿠키를 사용하면 XSS 공격으로부터 보호할 수 있음)
Refresh Token 관리
- 유효기간 길게 설정(Refresh Token은 재발급 하는데 사용되므로 긴 유효시간을 가짐)
- 서버 측 저장(서버의 안전한 데이터베이스에 저장해서 클라이언트가 제출한 Refresh Token을 검증)
- 클라이언트 측 저장(HttpOnly 쿠키, 보안 스토리지 등 안전한 저장소를 사용해야함)
재발급 정책
- Access Token 만료 시 : Refresh Token으로 새로운 Access Token 발급
- Refresh Token 만료 시 : 로그아웃 처리 또는 재인증 요구
- 동시 로그인 방지 : Refresh Token을 1회 사용 후 재발급하고, 이전 토큰은 무효화