달래dallae 2024. 8. 8. 17:21

JWT는 Json Web Token의 줄임말입니다.

구조

아래의 3가지로 구성되어있으며, 점으로 구분되는 데이터입니다.

  • Header
  • Payload
  • Signature

 

1. Header

일반적으로 토큰 유형과 사용중인 서명 알고리즘(Hmac, Sha256,Sha512...)가 포함

{
  "typ" : "JWT"
  "alg" : "SHA256"
}

 

2. Payload

등록된 클레임과 개인 클레임 등으로 이루어짐.

  • 등록된 클레임(필수아님) : iss(발행자), exp(만료시간), sub(제목), aud(대상)
  • 개인 클레임 : 정보 공유를 위한 사용자 지정 클레임
{
	"iss" : "dallae.log"
  	"sub" : "about Jwt"
  	"exp" : "165489753"
  	...
  	"username" : "dallae"
  	"isAdmin" : true
}

 

3. Signature

Header, Payload, SecretKey를 합쳐 암호화 한 결과값입니다.

SHA256 ( base64UrlEncode(header) + "." + base64UrlEncode(payload), secretKey )

 


동작 예시

  1. 유저가 id와 password를 서버로 전송한다.
  2. 서버는 id와 password를 검증한 후, 맞다면 비밀키로 암호화한 토큰을 만들어 유저에게 전달한다.
  3. 유저는 이 토큰을 헤더에 담아, 앞으로 모든 요청에 함께 보낸다.Authorization: Bearer header.payload.signature
  4. 서버는 모든 요청에 대해 토큰으로 사용자를 인증한다.

 

즉, 세션과 같은 방식은 서버에 저장되는 것으로 부담이 생기는데 이를 최소화할 수 있습니다.

단, payload(claim)의 정보가 많으면 토큰이 지나치게 길어지며 중요한 데이터는 넣지 못한다는 단점이 있습니다.