Refresh Token
앞서 우리가 적용했던 토큰은 유효기간을 주고, 사용하는 방식을 사용한다.
유효기간을 주지 않으면 다른 사용자에게 토큰을 탈취당했을 경우, 그 토큰을 계속해서 사용하게 되므로 위험하다.
그렇다고 유효기간을 짧게 주자니 사용자들이 시간이 지나면 계속해서 로그인을 해주어야 하는 불편함이 생기게 되어 이것도 또한 너무 불편하다.
이런 불편함을 해소하기 위해 나온 것이 Refresh Token이다
Refresh Token도 jwt를 사용하여 발급이 가능하다.
Refresh Token의 흐름
- 사용자가 로그인 시도를 한다.
- 로그인이 성공하면 Access Token과 함께 Refresh Token 발급
-> 회원 DB에 일반적으로 Refresh Token을 저장한다.
- 사용자가 Refresh Token을 안전한 장소에 보관한 후, 서버에 요청을 보낼 때 Access Token을 헤더에 실어 요청을 보낸다.
- Access Token을 서버에서 검증하게 되며, 맞는 Token이라면 요청한 데이터를 보내준다.
- Access Token의 유효기간이 만료되었을 때 요청을 보낸다.
- Access Token의 유효기간이 만료되었기 때문에 권한없음 에러를 보냄
- 사용자는 Refresh Token을 서버로 보내며, Access Token 발급 요청을 한다.
- 서버에서는 사용자가 보낸 Refresh Token과 DB에 저장되어 있는 Refresh Token을 비교.
-> Refresh Token이 동일하고, 유효기간도 지나지 않았다면 Access Token을 새로 발급한다.
=> Refresh Token은 쿠키에 저장하지만 주로 httpOnly 옵션을 주어 javascript를 이용하여 탈취하거나 조작할 수 없게 만든다.