[항해99]

[TIL] Access Token , Refresh Token

프잘백 2022. 3. 11. 23:33
728x90

1. JWT란?

JWT는 JSON Web Token의 약어로, JSON 형식의 데이터를 저장하는 토큰이며 다음과 같이 세 부분으로 구성된다.

  • 헤더(header): 토큰 종류와 해시 알고리즘 정보
  • 페이로드(payload): 토큰의 내용물이 인코딩된 부분
  • 시그니처(signature): 일련의 문자열, 시그니처를 통해 토큰이 변조되었는지 여부를 확인


2. Refresh Token?

 

Access Token(JWT)를 통한 인증 방식의 문제는 만일 제 3자에게 탈취당할 경우 보안에 취약하다는 점이다.

유효기간이 짧은 Token의 경우 그만큼 사용자는 로그인을 자주 해서 새롭게 Token을 발급받아야 하므로 불편하다. 그러나 유효기간을 늘리면, 토큰을 탈취당했을 때 보안에 더 취약해지게 된다.

이때 “그러면 유효기간을 짧게 하면서  좋은 방법이 있지는 않을까?”라는 질문의 답이 바로 "Refresh Token".

 

Refresh Token은 Access Token과 똑같은 형태의 JWT이다. 처음에 로그인을 완료했을 때 Access Token과 동시에 발급되는 Refresh Token은 긴 유효기간을 가지면서, Access Token이 만료됐을 때 새로 발급해주는 열쇠가 된다 

 

* Access Token은 탈취당하면 정보가 유출되는건 동일하다. 다만 짧은 유효기간 안에만 사용이 가능하기에 더 안전하다.

 

* Refresh Token의 유효기간이 만료됐다면, 사용자는 새로 로그인해야 한다. Refresh Token도 탈취될 가능성이 있기 때문에 적절한 유효기간 설정이 필요하다.

 

Refresh Token과 Access Token 인증 과정

3. 결론

 

장점

  • 기존의 Access Token만 있을 때보다 안전하다.

 

단점

  • 구현이 복잡하다.
  • Access Token이 만료될 때마다 새롭게 발급하는 과정에서 생기는 HTTP 요청 횟수가 많다. 이는 서버의 자원 낭비로 귀결된다.

 

 

References:

쉽게 알아보는 서버 인증 2편(Access Token + Refresh Token) — 그랩의 블로그 (tistory.com)

[Node.js] JWT: Access Token & Refresh Token 인증 구현 — TaxFree (tistory.com)