jwt refresh token 으로 스프링 시큐리티 인증/인가 구현

문제 상황 및 해결

jwt access_token 이용해 인증/인가를 구현했는데 사용자가 리뷰를 작성하고 있다가 등록버튼을 누르는 순간 토큰이 만료 되어 로그인을 다시 해야하게 되어서 하던 작업을 잃게 되었다. 이런 상황을 방지하기 위해 토큰이 만료되면 자동으로 다시 발급해주어 로그인이 풀리지 않게 구현하려한다. 이를 위해 refresh token 을 이용하게 되었다.

access_token 만을 이용해서 인증을 했을때의 문제점

Access Token의 유효기간을 짧게하여 토큰 남용을 줄이며 사용자가 겪는 불편함을 해결하기 위해 등장한 개념이 바로 Refresh Token이다.

Refresh Token과 AccessToken은 형태자체는 동일한 JWT이다. 다만 Access Token은 사용자의 직접적인 인증&인가에 사용되는 Token이고 Refresh Token은 Access Token의 유효기간이 만료되었을 때 Access Token의 재발급을 요청하는 토큰이다. 때문에 일반적으로 Access Token의 유효기간은 짧지만 Refresh Token의 유효기간은 상당히 길게 잡는 편이다.

시나리오

  1. 로그인을 하면 Access Token과 Refresh Token을 모두 발급한다.이때, Refresh Token만 서버측의 DB에 저장한다.

2. 클라이언트에서 서버에 요청을 보낼때 마다 토큰을 담아 보낸다.

 이때, 토큰을 검사함과 동시에 각 경우에 대해서 토큰의 유효기간을 확인하여 토큰 재발급 여부를 결정한다.