JWT Token (JSON Web Token)

임홍원·2023년 12월 1일
2
post-thumbnail

JWT Token (JSON Web Token)

JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다. 그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다

JWT 구조

JWT는 . 을 구분자로 나누어지는 세 가지 문자열의 조합이다.
. 을 기준으로 좌측부터 Header, Payload, Signature를 의미한다.

alg : 서명 암호화 알고리즘(ex: HMAC SHA256, RSA)

typ : 토큰 유형

Payload

서버와 클라이언트가 주고받는 시스템에서 사용될 정보가 들어있다.

Signature

시그니처에서 사용하는 알고리즘은 헤더에서 정의한 알고리즘 방식(alg)을 활용한다.
시그니처의 구조는 (헤더 + 페이로드)와 서버가 갖고 있는 유일한 key 값을 합친 것을 헤더에서 정의한 알고리즘으로 암호화를 한다.

JWT 장점

  • Header와 Payload를 가지고 Signature를 생성하므로 데이터 위변조를 막을 수 있음.
  • 인증 정보에 대한 저장소가 필요없음
  • JWT 토큰에는 기본 정보와 토큰이 검증되었음을 증명하는 서명이 포함되어있음
  • 세션은 클라이언트 정보를 저장하지만, 서버는 무상태가되어 확장성 용이
  • 토큰 기반으로 다른 로그인 시스템에 접근 가능
  • 모바일 어플리케이션 환경에서도 동작
  • OAuth의 경우 소셜 계정을 이용하여 다른 웹 서비스에 로그인 가능

JWT 단점

  • 토큰 자체에 정보를 담고있음
  • 정보가 많아질수록 토큰의 길이가 늘어나 네트워크에 부하를 줄 수 있음
  • Payload 인코딩 : payload는 암호화 된 것이 아니라 BASE64로 인코딩되어서 중간에 payload를 탈취하여 디코딩하면 정보가 노출될 가능성이 있음
  • Store token : stateless 특징을 가지므로, 토큰은 클라이언트에서 관리한다. 때문에 토큰을 탈취당하면 대처가 어려움

JWT Access Token & Refresh Token

JWT도 제 3자에게 탈취당할 가능성이 있기 때문에 그대로 사용하는것이 아닌 Access Token과 Refresh Token으로 나누어 사용한다.

Access Token

클라이언트가 가지고있는 실제 유저의 정보가 담긴 토큰
클라이언트에서 요청이 오면 서버는 해당 토큰에 있는 정보를 토대로 사용자 정보에 맞게 응답

Refresh Token

새로운 Access Token을 발급해주기 위해 사용하는 토큰으로 짧은 수명을 가지는 Access Token에게 새로운 토큰을 발급해주기 위해 사용.
해당 토큰은 보통 데이터베이스에 유저 정보와 같이 기록

0개의 댓글