[Spring] Refresh Token

야부엉·2023년 12월 1일

1. Refresh Token이란?

  • Access Token(하나의 Jwt Token이라 생각하면 된다.)이 만약에 제 3자에게 탈취를 당했다고 가정해보자. Access Token은 Http Stateless 특성을 지키기 위해 사용하는 방식임으로, 서버에서의 해당 토큰에 대한 정보가 없다. 즉, 탈취를 당해도 만료기간 동안 유저에 대한 정보가 없기 때문에 제 3자가 해당 유저인지 확인하는 방법이 없다. 이러한 방법을 해결하기 위해 Refresh Token이 필요하다.

  • Refresh Token은 Access Token과 같은 하나의 토큰이지만 기능의 차이가 있다. Access Token은 접근에 관여하는 토큰이고, Refresh Token은 Access Token의 재발급에 관여하는 토큰이다.

  • 위의 상황을 막기 위해 Access Token의 만료기간을 짧게 만들고, Refresh Token을 통해 재발급을 하게 만든다.

  • 처음으로 로그인과 같은 인증 이후, Access Token과 Refresh Token을 클라이언트에 동시에 발급한다. 발급한 토큰들을 클라이언트는 로컬 스토리지나 쿠키 방식으로 저장하고, 서버는 DB에 Refresh Token만 저장한다. 이 후 클라이언트는 요청을 할 때, 헤더에 이 둘을 담아 보낸다.

  • Access Token의 만료기간이 끝났을 경우, 같이 전달한 Refresh Token과 서버의 Refresh Token을 비교해 일치하면, 재발급을 해준다.

  • Refresh Token은 이러한 역할을 하기 때문에 만료기간을 길게 준다.

  • 로그아웃 시, 서버의 Refresh Token을 삭제하고, 다시 로그인 시 재발급 한다.

2. Refresh Token 인증 과정

  • 9~11 과정은 상황에 따라 선택한다. 프론트엔드에서 Access Token의 Payload를 통해 유효기간을 알 수 있기 때문에 프론트 엔드 쪽에서 API 요청 전에 토큰이 만료됐다면 곧바로 재발급 요청을 할 수도 있다.


출처

Access Token & Refresh 토큰 원리

profile
밤낮없는개발자

0개의 댓글