토큰 기반 인증 시스템에서 자주 사용되는 토큰 유형인 Access Token과 Refresh Token에 대해 알아보자.
사용자나 애플리케이션이 API에 접근할 수 있도록 인증을 제공하는 짧은 수명의 토큰. 특정 리소스에 대한 접근 권한을 부여하고, 서버에서 인증 및 권한 부여를 위해 사용된다.
Refresh Token은 Access Token을 재발급하는 데 사용되는 긴 수명의 토큰. 사용자가 다시 로그인하지 않고도 새로운 Access Token을 발급받을 수 있도록 한다.
Access Token은 접근에 관여하는 토큰으로, 보다 짧은 유효기간을 가지고, Refresh Token은 재발급에 관여하는 토큰으로, 보다 긴 유효기간을 가진다.
Refresh Token은 Access Token의 만료 시간이 지나면 새로운 Access Token을 발급받기 위해 사용된다.
Refresh Token은 단순 문자열 형식으로, 사용자 정보나 권한 정보가 포함되어 있지 않다. 하지만 Access Token은 일반적으로 JWT 형식으로, 사용자 정보나 권한 정보 등이 포함되기 때문에 탈취되면 더 위험할 수 있다.
일반적으로 Access Token은 유효 기간이 짧기 때문에 그만큼 탈취 위험이 낮아서 보안성이 높다고 할 수 있고, Refresh Token은 유효 기간이 길기 때문에 그만큼 탈취 위험이 높아서 보안성이 낮다고 할 수 있다.
하지만, Access Token이 탈취되면 해당 토큰을 통해 직접 정보에 접근할 수 있기 때문에 오히려 Access Token의 보안성은 낮다고 할 수 있다. 반면, Refresh Token은 누군가에 의해 탈취되더라도 그 누군가는 Access Token에 직접 접근할 수 없다. (이런 상황에서 악의적인 사용자에 의한 재발급을 막기 위해 Refresh Token을 통해 Access Token을 재발급 받기 위한 별도의 인증 과정이 존재) 그리고 정상적인 사용자는 Refresh Token으로 새로운 Access Token을 재발급하면 된다.
OAuth에서 제시한 기술로, 사용자의 개입 없이 Access Token을 자동으로 갱신하여 보안성을 높일 수 있다.
1. Access Token 자동 갱신
2. Refresh Token 정기적 교체
3. 여러 개의 토큰 동시 유효화
매번 새로운 Access Token을 발급받을 때마다 Refresh Token을 변경하여 새로운 토큰을 사용하거나, 새로운 Refresh Token을 발급할 때마다 이전에 사용되던 Refresh Token을 버리지 않고 보관하여 여러 개의 토큰이 동시에 유효하도록 하는 방법
보안 측면에서는 Refresh Token이 Access Token보다 더 안전하다고 볼 수 있고, 두 토큰을 함께 사용하면 보안성과 사용자 편의성을 모두 높일 수 있다.