Access Token

Access Token

 

Access Token은 사용자의 인증( 예) 로그인 )이 완료된 후 해당 사용자를 인증하는 용도로 발급하는 토큰을 말한다.

앞서 쿠키 ( Cookie )에 jwt를 설정하고, 지정된 만료 시간이 지나면 인증이 만료되는 구조 또한 Access Token이라고 부를 수 있다.

인증 요청시 Access Token을 사용하면, 토큰을 생성할 때 사용한 비밀키 ( Secret Key )로 인증을 처리하게 된다.

이 방식은 복잡한 설계나 여러 분기 처리 없이 코드를 구현할 수 있다는 장점을 가지고 있다.

 

Access Token은 Statelss ( 무상태 ) 즉, Node.js 서버가 재시작되더라도 동일하게 작동한다. 이는 jwt를 이용해 사용자의 인증 여부는 확인할 수 있지만, 처음 토큰을 발급한 사용자가 정말 그 사용자인지는 확인할 수 없다.

Access Token은 그 자체로도 사용자 인증에 필요한 모든 정보를 가지고 있다. 그렇기 때문에 토큰을 가지고 있는 시간이 늘어날 수록, 탈취되었을 때 피해 규모는 매우 크다.

토큰이 탈취되었다 하더라도, 서버에서는 해당 토큰이 탈취된 토큰인지 알 수 없고, 강제로 토큰을 만료시킬 수도 없다. 

따라서 서버는 언제나 토큰이 탈취될 수 있다는 가정 하에, 피해를 최소화할 수 있는 방향으로 개발을 진행해야 한다.

 


 

Refresh Token

Refresh Token

 

Refresh Token은 사용자의 모든 인증 정보를 담고 있는 Access Token과는 달리, 특정 사용자가 Access Token을 발급받기 위한 목적으로만 사용된다.

 

Refresh Token은 사용자의 인증 정보를 검증하는데 사용되고, 이를 서버에서 관리한다.

서버는 Refresh Token디코딩해 사용자의 정보를 확인하게 된다. 이 방식은 필요한 경우 서버에서 강제로 토큰을 만료시킬 수 있으며, 사용자의 인증 상태를 언제든지 서버에서 제어할 수 있다는 장점을 가지고 있다.

왜 직접 Access Token을 발급하지 않고, Refresh Token을 통해 Access Token을 발급하는 걸까?

이는 토큰이 탈취당한 경우에 대비해 피해를 최소화하기 위함이다.

일상생활에서 흔히 사용하는 OTP처럼, 사용자의 인증 정보는 짧은 시간동안만 사용되어야 한다. 주기적으로 토큰을 재발급함으로써, 토큰이 유출되더라도 그 피해가 오랜 시간 동안 지속되는 것이 아니라, 짧은 기간 동안만 사용 가능하도록 제한피해를 최소화 할 수 있게 된다.

서버에서는 언제나 토큰이 탈취될 수 있다는 사실을 항상 인지하고, 탈취를 막는 것이 어려운 상황이라면, 탈취된 토큰을 사용할 수 있는 기간을 줄임으로써 피해를 방지해야 한다.

'IT' 카테고리의 다른 글

[IT] Visual Studio Code - 디버그  (0) 2024.09.19
[IT] 정규표현식  (1) 2024.09.10
[IT] 인증, 인가  (0) 2024.09.09
[IT] JWT  (0) 2024.09.08
[IT] 쿠키와 세션  (0) 2024.09.08

+ Recent posts