본문 바로가기
개인 공부/TIL

TIL : JWT, Access Token / Refresh Token (16)

by 희조당 2022. 11. 30.
728x90

🔐 JWT

JWT란? Json Web Token의 약자로 인증에 필요한 정보를 암호화시킨 JSON 토큰이다.

JSON 데이터를 Base64 URL-safe Encode로 인코딩하였고, 토큰 내부에 위조 방지를 위한 전자서명도 들어있다.

🧷 구조 (Header.Payload.Signature)

  • Header : 타입과 해시 알고리즘(ex. HMAC SHA256, RSA)의 종류를 담고 있다.
  • Payload : 사용자 권한, 정보 등을 담고 있다. Key-Value로 이루어진 정보를 Claim이라고 한다.
  • Signature : 헤더에서 정해진 알고리즘과 비밀키를 사용해서 암호화한 인증을 위한 데이터이다. 

🧐 왜 JWT를 사용할까?

Base64를 통해서 암호화한다는 것을 알기 때문에 누구나 Payload를 쉽게 복호화할 수 있다.

따라서 Payload에는 민감한 정보를 담지 않는다.

그렇다면 왜 JWT를 사용할까? 바로 JWT의 목적은 보안이 아닌, 인증이기 때문이다.

JWT 자체가 탈취되는 경우를 방지하기 위해서 쓰이는 방법이 Access Token / Refresh Token 방식이다.


🔃 Access Token / Refresh Token 방식

토큰 자체가 탈취되면, 토큰을 획득한 모든 사람이 권한 접근이 가능하기 때문에 보안상에 문제가 발생한다.

JWT는 발급한 뒤 삭제가 불가능하기 때문에 유효시간을 설정해서 탈취 문제에 대응한다.

여기서 발생하는 문제점은 유효시간이 짧으면 자주 토큰을 발급해야 하고, 길면 보안이 취약해진다.

Access Token / Refresh Token 방식을 통해서 이 문제를 해결할 수 있다.

💡 Access Toke과 Refresh Token

두 토큰 모두 같은 Json Web Token이나 유효기간과 역할이 다르다.

Access Token은 짧은 유효기간을 가진 접근용 토큰이고, Refresh Token은 긴 유효기간을 가진 발급용 토큰이다.

🌊 Flow

🧐 어떻게 재발급을 하는 걸까?

1️⃣ 로그인 같은 과정은 Access Token과 Refresh Token 모두 발급한다.

  • 서버는 Refresh Token은 DB에 저장하고, 클라이언트는 두 토큰을 쿠키 혹은 스토레지 영역에 보관한다.

2️⃣ 클라이언트가 인증이 필요한 API에 접근하면 토큰부터 검사한다.

  • Access Token과 Refresh Token 모두 만료 : 예외 발생 (재 로그인)
  • Access Token 만료, Refresh Token 유효 : Refresh Token을 검증하여 Access Token 재발급
  • Access Token 유효, Refresh Token 만료 : Access Token을 검증하여 Refresh Token 재발급
  • Access Token과 Refresh Token 모두 유효 : API 접근 허용

3️⃣ 로그아웃 시 Access Token과 Refresh Token 모두 만료시킨다.

 

댓글