desktools.run
Request
블로그 목록으로 돌아가기
Web SecuritySeptember 20, 2026

JWT(JSON Web Token) 아키텍처와 보안 검증: Header, Payload, Signature 완벽 해석

Official desktools.run Article

JWT(JSON Web Token) 아키텍처와 보안 검증: Header, Payload, Signature 완벽 해석

클라이언트-서버 구조의 웹 애플리케이션 및 REST API 개발에서 가장 보편적으로 사용되는 인증/인가 메커니즘이 바로 JWT(JSON Web Token)입니다.

JWT는 마이크로서비스 아키텍처(MSA) 및 무상태(Stateless) 서버 환경에서 별도의 세션 DB 조회 없이 사용자의 신원을 입증할 수 있는 강력한 토큰 표준입니다.


🧩 1. JWT의 3단계 구문 구조 (Dot으로 구분된 3가지 부분)

JWT 토큰을 살펴보면 마침표(.)로 연결된 3개의 Base64URL 인코딩 문자열로 이루어져 있습니다:

```text eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c ```

### ① Header (헤더) - 토큰의 타입('"typ": "JWT"')과 서명 암호화 알고리즘('"alg": "HS256"' 또는 '"RS256"') 정보를 담고 있습니다.

### ② Payload (페이로드 - 클레임 모음) - 사용자의 ID, 이름, 권한(Role), 토큰 발급 시각(iat), 만료 시각(exp) 등의 클레임(Claim) 데이터를 포함합니다. - 주의: Payload는 단순히 Base64URL로 인코딩된 것일 뿐 암호화(Encryption)된 것이 아닙니다. 따라서 비밀번호나 개인 금융 정보 같은 민감한 데이터는 절대 Payload에 넣으면 안 됩니다.

### ③ Signature (서명) - 서버가 가지고 있는 비밀키(Secret Key)를 이용해 Base64(Header) + "." + Base64(Payload)를 위변조할 수 없도록 암호화한 해시값입니다. - 클라이언트가 토큰 내용을 조작하면 서명이 일치하지 않아 서버에서 즉시 거부됩니다.


⚠️ 2. 개발자가 자주 범하는 JWT 보안 취약점

1.
alg: none 공격: 일부 부실한 JWT 라이브러리에서 헤더의 알고리즘을 none으로 설정 시 서명 검증을 건너뛰는 취약점입니다.
2.
짧지 않은 만료 시간(exp) 설정: Refresh Token 없이 Access Token의 유효기간을 며칠씩 길게 가져갈 경우, 토큰 탈취 시 큰 피해가 발생할 수 있습니다.
3.
로컬스토리지(LocalStorage) 보관 시 XSS 위험: JWT를 브라우저 LocalStorage에 저장하면 XSS(스크립트 삽입) 공격에 쉽게 탈취되므로 HttpOnly Cookie 보관을 권장합니다.

🛠️ 안전한 브라우저 JWT 디코더 활용법

개발 및 디버깅 중 발급된 JWT 토큰의 만료 시간이나 사용자 클레임(Claim)을 손쉽게 확인하고 싶다면 desktools.run의 [JWT Decoder](file:///tools/jwt-decoder)를 활용하세요.

•
100% 로컬 처리: 입력한 JWT 토큰이 서버로 절대 전송되지 않아 보안상 매우 안전합니다.
•
실시간 만료 검증: exp 타임스탬프를 읽어 토큰의 남아있는 유효시간을 한눈에 시각화해 줍니다.