Java

JWT(JSON Web Token) 개념 및 구조

cob 2022. 10. 24. 14:10
JWT

 

JWT 란?
서버에서 전자 서명된 토큰을 이용하면 인증에 따른 스케일 문제를 해결할 수 있다.
전자 서명 토큰 중 하나가 JWT(JSON Web Token)이다.
기존 토큰 기반 인증과 차이점은 서버가 헤더와 페이로드를 생성한 후 전자 서명을 한다는 점이다.
JSON 형태의 토큰으로 {header}.{payload}.{signature}로 구성되어있고, 토큰 기반 인증이므로 서버가 생성한다.

 

 

 


1. JWT 장점

사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 별도의 인증 저장소가 필요 없고,
MSA 환경에서 인증 서버와 데이터베이스에 의존하지 않는 쉬운 인증 및 인가 방법을 제공한다.
MSA(micro service architecture) 란?
소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식입니다.

참고 URL : https://aws.amazon.com/ko/microservices/

 

- JSON 웹 토큰의 사용을 권장하는 이유

  • URL  파라미터와 헤더로 사용
  • 수평 스케일이 용이
  • 디버깅 및 관리가 용이
  • 트래픽 대한 부담이 낮음
  • REST 서비스로 제공 가능
  • 내장된 만료

 

 

 


2. JWT 단점

  • 토큰은 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작하더라도 토큰에 직접 적용할 수 없다.
  • 더 많은 필드가 추가되면 토큰이 커질 수 있다.
  • 비 상태 애플리케이션에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있습니다.

 

 

 


3. JWT 구성

 Authorization: Bearer {header}.{payload}.{signature}
{ // header
	"typ":"JWT",
	"alg":"HS512",
}.
{ // payload
	"sub": "40288093784915d201784916a40c001",
	"iss":"demo app",
	"iat":1595733657,
	"exp":1596597657
}.
Nn4d1MOVLZg79sfFACTIpCPKqWmpZMZQ.....
// signature

3-1) Header

  • typ : Type을 줄인 말로 토큰의 타입을 의미
  • alg : Alogrithm을 줄인 말로 토큰의 서명을 발행하는 데 사용된 해시 알고리즘의 종류를 의미

3-2) Payload

  • sub : Subject를 줄인 말로 토큰의 주인을 의미 sub는 ID처럼 유일한 식별자여야 한다.
  • iss : Issuer를 줄인 말로 토큰을 발행한 주체를 의미 예를 들어 우리 앱에서 토큰을 발행했다면 demo app, 페이스북이 발행했다면 facebook이 된다.
  • iat : issued at을 줄인 말로 토큰이 발행된 날짜와 시간을 의미
  • exp : expiration을 줄인 말로 토큰이 만료되는 시간을 의미

3-3) Signature

  • 토큰을 발행한 주체 Issuer가 발행한 서명으로 토큰의 유효성 검사에 사용된다.

 

* 토큰을 훔쳐갈 수 있기 때문에 반드시 HTTPS 통신을 해야 한다 *

반응형