#1 JWT란 무엇인가?

찬근·2023년 3월 1일
0

이 글은 JWT 공식문서를 참고하여 작성된 글입니다.

JSON Web Token

JWT는 JSON Web Token의 준말입니다.

JSON이 무엇인지는 이 글에서 확인할 수 있습니다.

Definition

공식 문서에는 JWT를 다음과 같이 정의합니다.

JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object.

위 정의를 번역, 요약하면 다음과 같습니다.

  • JSON 객체로 정보를 안전하게 전달하는 간결하고 독립적인 방법을 정의하는 개방형 표준

언제 사용할까?

Authorization

  • 가장 일반적인 시나리오
  • 로그인 이후 각 요청에 JWT가 포함됨
  • 해당 JWT로 routes, 서비스, 리소스 접근 가능

Information Exchange

  • 정보를 안전하게 전달
  • 예를 들어, public/private 키 쌍을 통해 보낸 사람이 누구인지 확인 가능

Structure of JWT

dots(.)으로 구분된 세 부분으로 구성

  • Header
  • Payload
  • Signature

일반적으로 다음과 같은 구조

xxxxx.yyyyy.zzzzz

세 부분을 하나씩 살펴봅시다.

서명 알고리즘(HMAC SHA256, RSA)과 토큰의 타입으로 구성됩니다.

예시는 다음과 같습니다.

{
  "alg": "HS256",
  "typ": "JWT"
}

Header는 Base64Url로 인코딩됩니다.

Payload

Payload는 클레임을 포함하는 부분입니다. 클레임은 엔티티(일반적으로 사용자) 및 추가 데이터에 대한 statement입니다.

클레임에는 3가지 유형이 있습니다.

  • Registered claims
    • 필수는 아니지만 권장됨
    • 유용하고 상호 운용한 클레임을 제공하기 위한 미리 정의된 클레임
  • Public claims
    • JWT를 사용하는 사람들이 정의
    • 충돌 방지 필요
  • Private claims
    • 정보 공유를 위해 생성된 사용자 정의 클레임
    • Registered, Public claims가 아님

예시는 다음과 같습니다.

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

Payload는 Base64Url로 인코딩됩니다.

Signature

Signature 부분은 인코딩된 Header, 인코딩된 Payload, secret, Header에 지정된 알고리즘을 서명하여 구성합니다.

HMAC SHA256 알고리즘이 지정된 경우의 예시는 다음과 같습니다.

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

다음으로

이번 글에서는 JWT가 무엇인지, 어떤 구조를 가지고 있는지 알아봤습니다. 다음 글에서는 JWT의 작동 방식에 대해 알아보겠습니다.

profile
일관성 있는 개발자

0개의 댓글