Access Token과 Refresh Token을 말하기에 앞서 JWT(Jason Web Token)에 대해 조금 알아보자
JWT란 유저의 로그인 정보를 확인하는 방법 중 하나로 Header, Payload, Signature로 구성되어 있으며 비밀키로 암호화 된다.
클라이언트는 JWT를 통해 지속적인 로그인을 할 필요없이 서비스를 이용 할 수 있게 된다.
하지만, 서버는 JWT가 변조되지 않았는지만 확인하기 때문에 JWT를 탈취당했을 때 보안상의 문제가 발생 할 수 있다.
보안문제를 최소화하기 위해 JWT는 유효기간을 Payload에 작성하고 Signature에 암호화되어 저장되므로 탈취자가 Payload의 유효기간을 더 길게 변경한다해도 비밀키를 알지 못하는 이상 Signature에 알맞게 암호화할 수 없어 오래는 사용할 수 없다.
또한, 보안을 위해 유효기간을 짧게 한다면 유저는 자주 로그인을 해야하게되므로 경험적으로 좋지 않다.
이러한 문제를 보완하기 위한 것으로 Access Token과 Refresh Token을 만드는 것이다.
** Refresh Token Rotation: Refresh Token을 1회성으로 두고 Access Token 발급 시 Refresh Token도 함께 발급
Access Token / Refresh Token을 적용함으로써 Token 탈취에 의한 보안적 위험을 최소화할 수 있다.
그렇다고 보안 측면에서 안정적이라는 뜻은 아니다.
Access Token / Refresh Token이 탈취된다면 정보가 유출되는 것은 기존과 동일하지만 Access Token의 유효기간을 기존보다 짧게 가져갈 수 있기 때문에 보안적 위험을 최소화할 수 있다는 것이다.