본문 바로가기
Spring

[Spring] JWT(Json Web Token)

by worldcenter 2024. 11. 11.

 

JWT는 당사자 간에 정보를 JSON 형태로 안전하게 전송하기 위한 토큰 입니다. JWT는 URL로 이용할 수 있는 문자열로만 구성돼 있으며, 디지털 서명이 적용돼 있어 신뢰할 수 있습니다. URL에서 사용할 수 있는 문자열로만 구성돼 있기 때문에 HTTP 구성요소 어디든 위치할 수 있습니다.

 

 

JWT의 구조

JWT는 점(.)으로 구분된 아래의 세 부분으로 구성됩니다.

  • 헤더(Header)
  • 내용(Payload)
  • 서명(Signature)

XXXXX.YYYYY.ZZZZZ

   헤더   .   내용  .  서명

 

1) 헤더(header)

  • 헤더는 검증과 관련된 내용을 담고 있습니다.
  • alg 속성은 해싱 알고리즘을 지정
  • typ은 토큰의 타입을 지정
{
    "alg": "HS256",
    "typ": "JWT"
}

 

2) 내용(payload)

  • 토큰에 담는 정보를 포함
  • 내용에 포함된 속성들을 '클레임'
    • 등록된 클레임(Registered Claims) : 필수는 아니지만 토큰에 대한 정보를 담기 위해 이미 이름이 정해져 있는 클레임
    • 공개 클레임(Public Claims) : 키 값을 마음대로 정의할 수 있음
    • 비공개 클레임(Private Claims) : 통신 간에 상호 합의되고 둘 다에 속하지 않는 클레임
* 등록된 클레임 *

iss : JWT의 발급자(Issuer) 주체
sub : JWT의 제목(Subject)
aud : JWT의 수신인(Audience)
exp : JWT의 만료 시간(Expiration)
nbf : Not Before를 의미
iat : JWT가 발급된 시간(Issued at)
jti : JWT의 식별자(JWT ID)
{
    "sub": "wikibooks payload",
    "exp": "1602076408",
    "userId": "wikibooks",
    "username": "flature"
}

 

3) 서명(signature)

  • 인코딩된 헤더, 인코딩된 내용, 비밀키, 헤더의 알고리즘 속성 값을 가져와 생성됩니다.