개요
JWT 토큰을 사용하면 클라이언트와 서버는 안전하게 통신 할 수 있다.
하지만 이를 탈취 당한다면, 서버는 탈취 여부를 확인하지 못하고 탈취한 사람을 해당 토큰의 주인과 같이 인증하게 된다. 따라서 이를 위해 유효기간을 설정 하는 것이다.
하지만 유효기간이 짧다면 사용자는 불편을 느낄 것이고, 길다면 보안에 취약해진다.
따라서 만들어진 것이 유효기간이 다른 Acces Token과 Refresh Token 이다.
Process
Access Token 의 유효기간은 상대적으로 짧다. (ex. microsoft 60, amzon 1시간 )
Refresh Token 의 유효기간은 상대적으로 길다. (microsoft 1년 )
API 통신 시 Access Token 을 사용하고, Refresh 토큰은 Access 토큰이 만료되어 갱신될 때만 사용한다.
즉 탈취 위험이 큰 Access Token의 만료기간을 짧게 두고 Refresh Token 으로 재발급 하여 피해를 최소화 시키는 구조이다.

로그인 시 클라이언트는 서버로부터 Refresh 토큰과, Access 토큰을 받는다.
클라이언트는 두 토큰을 local에 저장한다. (cookie or local storage)
클라이언트는 헤더에 Access 토큰을 넣고 API 통신
Access 토큰 만료 시 유저는 권한을 잃음 (server는 401 에러 응답- token 기한 만료)
헤더에 Refresh Token 을 넣어 API 재요청
Refresh Token으로 사용자의 권한을 확인한 서버는 응답헤더에 새로운 Access token을 넣어 응답
Refresh 토큰도 만료시 클라이언트는 재로그인 필요

Refresh Token은 안전한가?
그렇다면 Refresh Token은 탈취 위험이 없을까?
Refresh Token은 비교적 통신 빈도가 적긴 하지만 탈취 가능성이 없는 것은 아니다.
때문에 OAuth 에서는 Refresh Token Rotation 을 제공
Access 토큰이 재요청 될 때마다 Refresh 토큰도 새로 발급 받는 것.