제로베이스
Refresh 토큰 본문
Access 토큰은 갖고 있는 유저에게 특정 권한을 주기 위한 목적으로 사용한다. 사실 아무런 안전장치 없이 단독으로 사용하면 안정성 문제가 생길 수도 있다. 특히 토큰의 만료 기간을 길게 잡으면 토큰을 누군가 가로챘을 때 더 오랫동안 특정 권한을 갖는 유저 행세를 할 수 있다.
그렇다고 해서 만료 기간을 짧게 잡으면 이메일과 비밀번호로 인증을 너무 자주 해야 돼서 귀찮고 위험할 수 있다. 이 문제를 어느 정도 해소하기 위해서 때때로 refresh 토큰이란걸 같이 사용한다.
refresh 토큰은 access 토큰이 만료됐을 때, 이메일 비밀번호를 사용하지 않고 access 토큰을 새롭게 발급받는 데 사용되는 토큰이다.
먼저 유저가 로그인을 하기 위해서 리퀘스트로 서버에 이메일과 비밀번호를 보내고, 서버가 이걸 확인했다고 하자.
그럼 서버는 클라이언트한테 access와 refresh 두 가지의 토큰을 보내줄 수 있다.
Access 토큰이 소유자가 특정 권한을 가질 수 있게 하는 토큰이라면, Refresh 토큰은 이메일과 비밀번호를 사용하지 않고 새로운 access 토큰을 발급 받을 수 있께 하는 토큰이다.
그러니까 access 토큰을 사용하다가 만료가 돼서 더 이상 리쿼스트를 인증할 수 없게 되는 경우가 생겼다고 하자.
그럼 클라이언트는 access 토큰을 새롭게 발급 받는 URL에 새로운 GET 리퀘스트를 보낸다. 이때 body에 refresh 토큰을 함께 보낸다.
그럼 서버는 refresh 토큰이 유효한 걸 확인한 후, 새로운 access 토큰을 발급한 후 리스폰스로 클라이언트에게 돌려준다.
일반적으로 refresh 토큰이 access 토큰보다 만료 기간이 더 길다. 설정하기 나름이지만 예를 들어 access 토큰의 만료기간이 10분이면 refresh 토큰은 24시간 이렇게 설정한다.
access 토큰의 만료 기간이 짧기 때문에 서버로 토큰을 보낼 때 누군가 이정보를 가로챈다고 해도 최대 10분까지만 다른 유저 행세를 할 수 있다. 만약 누군가 가로챈다고 해도 그렇게 오래 사용할 수는 없으니 조금 더 안전하다고 할 수 있다.
refresh 토큰은 access 토큰이 만료됐을 때만 보내면 되기 때문에 훨씬 더 적게 보내도 되고 그만큼 누가 빼돌릴 확률이 줄어든다. 클라이언트가 이 두 토큰을 저장하고 있으면 refresh 토큰이 만료할 때까지 특정 권한을 갖는다는걸 증명할 수 있다. 그렇기 때문에 이메일 비밀번호를 받지 않아도 계속 로그인 상태를 유지할 수 있어 편리하고, 이메일과 비밀번호라는 개인 정보를 리퀘스트로 최대한 적인 횟수로 보내도 되기 때문에 더 위험 부담을 줄일 수 있다.
'웹 개발 기본기' 카테고리의 다른 글
쿠키 보안 (0) | 2023.09.27 |
---|---|
쓰로틀링(throttling) (0) | 2023.08.28 |
디바운싱(debouncing) (1) | 2023.08.28 |
두 가지 종류의 콜백 (1) | 2023.08.27 |
async 함수가 리턴하는 Promise 객체 (0) | 2023.08.27 |