JWT 디코더
JWT(JSON Web Token)을 붙여넣으면 Header와 Payload 데이터를 디코딩하여 보여줍니다.
JWT 디코더 -- RFC 7519 기반 토큰 분석 도구
JWT(JSON Web Token)는 RFC 7519에 정의된 개방형 표준으로, 당사자 간 정보를 JSON 객체로 안전하게 전달하기 위한 컴팩트하고 자기완결적(self-contained)인 방식입니다. 이 디코더는 JWT 문자열을 입력하면 Header, Payload, Signature 세 부분을 즉시 파싱하여 사람이 읽을 수 있는 형태로 표시하며, 만료 시간(exp), 발급 시간(iat) 등 타임스탬프 클레임을 한국어 날짜로 자동 변환합니다.
JWT의 3단 구조: Header.Payload.Signature
JWT는 점(.)으로 구분된 세 개의 Base64URL 인코딩 문자열로 구성됩니다.
| 구성요소 | 내용 | 예시 필드 |
|---|---|---|
| Header | 토큰 타입과 서명 알고리즘 | {"alg":"HS256","typ":"JWT"} |
| Payload | 클레임(Claims) -- 사용자 정보와 메타데이터 | iss, sub, exp, iat, roles |
| Signature | Header+Payload를 비밀 키로 서명한 값 | HMAC-SHA256 또는 RSA-SHA256 해시 |
서명 알고리즘: HS256 vs. RS256
HS256(HMAC-SHA256)은 대칭 키 알고리즘으로, 서버와 클라이언트가 동일한 비밀 키(Secret)를 공유합니다. 구현이 간단하지만 키 배포가 어렵습니다.RS256(RSA-SHA256)은 비대칭 키 알고리즘으로, 개인 키로 서명하고 공개 키로 검증합니다. 마이크로서비스 아키텍처에서 공개 키만 배포하면 되므로 키 관리가 유리하며, JWKS(JSON Web Key Set) 엔드포인트를 통해 자동 키 로테이션이 가능합니다.
보안 경고: JWT 사용 시 반드시 지켜야 할 사항
- Signature 검증 필수: 서버 측에서 반드시 비밀 키(또는 공개 키)로 서명을 검증해야 합니다. 검증 없이 Payload를 신뢰하면 토큰 위변조 공격에 노출됩니다.
- 민감 정보 제외: Payload는 Base64URL 인코딩일 뿐 암호화가 아닙니다. 비밀번호, 신용카드 번호 등 민감 정보를 포함하지 마세요.
- XSS 방어: localStorage에 토큰을 저장하면 XSS 공격으로 탈취될 수 있습니다. HttpOnly 쿠키 또는 메모리 저장을 권장합니다.
- CSRF 방어: 쿠키 기반 전송 시 SameSite 속성과 CSRF 토큰을 함께 사용하세요.
- 짧은 만료 시간: Access Token은 15~30분 이내로 설정하고, Refresh Token으로 재발급 받는 패턴을 사용하세요.
실전 디버깅 시나리오
- API 요청이 401 Unauthorized를 반환할 때 -- exp 클레임으로 만료 여부 확인
- 권한 오류(403 Forbidden) 발생 시 -- Payload의 roles/permissions 클레임 점검
- SSO(Single Sign-On) 연동 시 -- iss(발급자)와 aud(대상) 클레임 검증
- OAuth 2.0 Access Token 분석 -- scope 클레임으로 허용된 API 범위 확인
관련 도구
SSH 인증이 필요하면 SSH 키 생성기를, 파일 권한 설정은 chmod 계산기를, API 스케줄링은 Cron 표현식 생성기를 활용하세요.
참고 자료
- IETF RFC 7519 -- JSON Web Token (JWT)
- IETF RFC 7515 -- JSON Web Signature (JWS)
- OWASP -- JSON Web Token Cheat Sheet
- jwt.io -- JWT 디버거 및 라이브러리 목록