시스템 지식/보안

[JWT의 구조] Header, Payload, Signature의 역할과 의미

Dachaes 2025. 4. 14. 00:02

JWT - Header, Payload, Signature 

 

JWT(JSON Web Token)는 사용자 인증과 권한 부여를 위한 대표적인 토큰 기반 방식입니다. 많은 개발자들이 JWT를 사용하면서도 "헤더, 페이로드, 서명이 각각 무슨 역할을 하는지"는 모호하게 아는 경우가 많습니다.

이 글에서는 JWT를 구성하는 세 요소인 Header, Payload, Signature를 하나씩 뜯어보며, 구조, 역할, 보안상의 유의점까지 완벽하게 이해할 수 있도록 설명합니다.

 


1.  JWT의 전체 구조

JWT는 .으로 구분된 세 개의 문자열로 구성됩니다.

<Header>.<Payload>.<Signature>
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.  ← Header
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNTE2MjM5MDIyfQ.  ← Payload
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c  ← Signature
  • 각 부분을 자세히 살펴봅시다.

a.  Header (토큰의 타입과 서명 알고리즘)

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

 

역할

  • alg : 서명(Signature)을 생성하는 데 사용되는 알고리즘 (예: HS256 (HMAC + SHA-256), RS256 (RSA + SHA-256))
  • typ : 토큰의 타입 (대부분 "JWT")

보안 팁

  • 알고리즘을 클라이언트가 조작할 수 있으므로, 서버에서 알고리즘을 고정해서 검증해야 합니다.

b.  Payload (토큰의 실제 데이터)

{
  "sub": "1234567890",
  "name": "Alice",
  "role": "admin",
  "iat": 1516239022,
  "exp": 1713000000
}

 

역할

  • 클레임(Claim)이라 부르는 데이터를 포함하며, 인증 및 권한 정보 등을 담음
  • 크게 세 종류의 클레임이 있음
클레임 종류 설명 예시
등록된(Registered) JWT 표준에 정의된 필드 iss, exp, sub, iat, aud
공개(Public) 모든 사용자에게 공유 가능한 데이터 name, role, email 등
비공개(Private) 발급자와 수신자 간의 커스텀 필드 예: userId, isPremiumUser 등

주의 사항

  • Base64Url 인코딩일 뿐, 암호화된 것이 아닙니다.
  • 누구나 디코딩해서 내용을 볼 수 있으므로, 민감 정보(PIN, 패스워드 등)는 절대 포함하면 안됩니다.
  • exp (만료 시간) 클레임은 필수로 설정하는 것이 좋습니다.

c.  Signature (토큰 위조 방지)

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)
  • 또는 RSA를 사용할 경우, 개인 키로 서명하고 공개 키로 검증합니다.

역할

  • 토큰이 위조되지 않았음을 보장
  • 서버는 이 서명을 검증해 토큰이 신뢰할 수 있는 발급자에 의해 만들어졌는지 확인

예시 (Node.js)

const jwt = require('jsonwebtoken');

const token = jwt.sign(
  { name: 'Alice', role: 'admin' },
  'my-secret-key', // 서명에 사용되는 비밀키
  { algorithm: 'HS256', expiresIn: '1h' }
);
  • 이 서명 덕분에, Payload가 변경되면 서명이 무효화되어 검증에 실패하게 됩니다.

 


2.  시각화 - JWT 구조 한눈에 보기

┌────────────┐    ┌───────────────┐    ┌────────────────────┐
│   Header   │ .  │    Payload    │ .  │     Signature      │
└────────────┘    └───────────────┘    └────────────────────┘
   alg, typ       사용자 정보, 클레임       위조 방지 서명

 


3.  마무리

요약

구성 요소 역할 포함 정보 보안 주의
Header 알고리즘, 타입 alg, typ 알고리즘 고정 필요
Payload 사용자 데이터 sub, name, role 등 민감 정보 금지
Signature 위조 방지 서명값 secret 키 철저히 보관

함께 보면 좋은 자료

블로그 글 :

 

[JWT] 인증 시스템의 핵심

JWT (JSON Web Token) 웹 애플리케이션에서 로그인 후 사용자 인증 상태를 어떻게 유지할까요? 세션? 쿠키? 이 외에도 현대적인 방식으로 널리 사용되는 것이 바로 JWT(JSON Web Token)입니다.이 글에서는 J

dachaes-devlogs.tistory.com