JWT(JSON Web Token)의 구조와 각 구성 요소

chaewon·2025년 8월 10일

JWT(JSON Web Token)의 구조와 구성 요소

📌 JWT란?

  • 서버와 클라이언트 간에 JSON 객체를 안전하게 전송하기 위한 토큰 형식
  • .(점)으로 구분된 3개의 문자열로 구성
xxxxx.yyyyy.zzzzz
Header.Payload.Signature

1. 구조

구성 요소설명예시
Header토큰의 메타데이터, 서명 알고리즘과 타입 명시{"alg": "HS256", "typ": "JWT"}
Payload토큰에 담길 실제 데이터(클레임, Claims){"sub": "user123", "name": "John Doe", "iat": 1516239022}
SignatureHeader와 Payload를 비밀키로 서명한 값, 위변조 방지HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

2. 각 구성 요소 상세

🔹 Header

  • alg : 서명에 사용된 알고리즘 (예: HS256, RS256)
  • typ : 토큰의 타입(보통 "JWT")
{
  "alg": "HS256",
  "typ": "JWT"
}

🔹 Payload

  • 클레임(Claims) : 토큰에 담는 데이터
    • 등록된(Registered) 클레임 (RFC 7519 표준)
      • iss: 발급자
      • sub: 주제(사용자 ID)
      • aud: 수신자
      • exp: 만료 시간
      • nbf: Not Before
      • iat: 발급 시간
      • jti: JWT 고유 ID
    • 공개(Public) 클레임 : 이름이 등록된 커스텀 클레임
    • 비공개(Private) 클레임 : 당사자 간 정의한 키-값 쌍
{
  "sub": "user123",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516242622
}

🔹 Signature

  • 생성 과정:
    1. Header를 Base64URL 인코딩
    2. Payload를 Base64URL 인코딩
    3. Header + "." + Payload를 선택한 알고리즘과 비밀키로 서명
  • 역할: 토큰 위변조 방지

3. JWT 예시

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • Header
{"alg": "HS256", "typ": "JWT"}
  • Payload
{"sub": "user123", "name": "John Doe", "iat": 1516239022}
  • Signature : HMACSHA256 서명 값

4. JWT 동작 흐름

  1. 클라이언트 인증 요청 → 인증 서버(Authorization Server)에 자격 증명 전달
  2. 인증 서버가 JWT 발급 (Header.Payload.Signature 생성)
  3. 클라이언트가 HTTP 요청 시 Authorization: Bearer <JWT> 헤더로 전송
  4. 리소스 서버(Resource Server)가 서명 및 클레임(iss, exp, nbf) 검증
  5. 검증 성공 시 요청 처리
    실패 시 401 Unauthorized 반환

5. Spring Security에서의 JWT 처리

  • Bearer Token 기반 인증 (Authorization 헤더)
  • JwtDecoder로 서명·클레임 검증
  • JwtAuthenticationProviderJwtAuthenticationConverter를 통해 GrantedAuthority 매핑
  • 기본적으로 scope 또는 scp 클레임 값을 SCOPE_ prefix 권한으로 변환

6. Spring Security 권장 설정 예시

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: https://idp.example.com/issuer
  • issuer-uri 기반으로 .well-known/openid-configuration 조회 → jwks_uri 자동 가져오기
  • Authorization Server의 JWK Set 변경 시 자동 키 로테이션
  • jwk-set-uri를 직접 지정하면 Authorization Server가 없어도 기동 가능

7. 기본 검증 항목

  • iss 발급자 검증
  • exp/nbf 시간 검증 (기본 clock skew 60초)
  • 서명 알고리즘 및 공개키 기반 검증
  • JWK Set 변경 시 자동 반영

rfc 7519 공식 문서
https://www.rfc-editor.org/rfc/rfc7519
spring security 공식 문서

RFC(Request for Comments):
인터넷 표준을 정의하는 문서 시리즈로, IETF(Internet Engineering Task Force)에서 발행
네트워크, 프로토콜, 보안 표준 등을 기술하고, 표준으로 채택되면 전 세계적으로 통용된다.

RFC 7519:
JSON Web Token (JWT)
JWT의 구조, 사용 목적, 클레임 종류, 서명/검증 방식 등 JWT를 어떻게 설계하고 구현해야 하는지에 대한 공식 규격 정의

0개의 댓글