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 보안 취약점
🛠️ 안전한 브라우저 JWT 디코더 활용법
개발 및 디버깅 중 발급된 JWT 토큰의 만료 시간이나 사용자 클레임(Claim)을 손쉽게 확인하고 싶다면 desktools.run의 [JWT Decoder](file:///tools/jwt-decoder)를 활용하세요.