JWT 디코더
🔐 인코딩JWT 토큰을 분해하여 Header·Payload·Signature 내용을 한눈에 파악합니다.
JWT 구조
- Header: 알고리즘(alg), 토큰 타입(typ)
- Payload: 클레임(claims) - sub, iss, exp, iat 등
- Signature: Header + Payload + Secret으로 생성
🔑 JWT 디코더란?
JWT는 점(.)으로 구분된 세 토막에 사용자 정보를 담는 인증 토큰 규격입니다(RFC 7519). Header는 서명 알고리즘, Payload는 사용자 ID나 권한 같은 클레임, Signature는 앞 두 부분을 비밀 키로 묶은 위변조 방지 코드입니다. 이 도구는 점으로 분리된 세 부분을 Base64url로 디코딩해 사람이 읽을 수 있는 JSON으로 풀어 주고, exp 클레임이 있으면 현재 시각과 비교해 만료 여부도 표시합니다. 로컬에서만 처리되며 입력한 토큰이 어디로도 전송되지 않습니다.
📋 JWT 주요 클레임
🛡️ JWT 다룰 때 자주 빠지는 함정
- alg: none 공격 — 2015년 공개된 취약점. Header의 alg를 "none"으로 바꾸고 Signature를 비워 보내면 일부 라이브러리가 무서명 토큰을 받아들였습니다. 서버에서 허용된 알고리즘 목록(HS256, RS256 등)을 명시적으로 검증해야 합니다.
- Payload는 암호화가 아님 — Base64url을 풀기만 하면 누구나 내용을 봅니다. 비밀번호·주민번호·카드번호처럼 노출되면 안 되는 정보를 넣지 마세요.
- 저장 위치 —
localStorage는 XSS에 취약합니다. HttpOnly Secure 쿠키 또는 메모리 보관이 권장됩니다. - 토큰 폐기 대응 —
exp만 믿지 말고 서버에서 블랙리스트나jti기반 사용 추적을 함께 운용하세요.
🔒 보안 주의
서명 검증은 절대 브라우저에서 하지 마세요. HMAC의 비밀 키나 RSA/ECDSA의 키가 노출되면 토큰 시스템 전체가 무력화됩니다. 검증은 서버에서 jose, jsonwebtoken 같은 검증된 라이브러리로 진행해야 합니다.
자주 묻는 질문
JWT 디코딩은 안전한가요?▼
JWT의 Header와 Payload는 암호화가 아닌 Base64url 인코딩이라 누구나 디코딩할 수 있습니다. 그래서 비밀번호나 카드번호 등 민감한 정보는 절대 Payload에 넣으면 안 됩니다. 변조 방지는 Signature만으로 이루어집니다.
토큰 만료 확인은 어떻게 하나요?▼
Payload의 exp(expiration) 클레임을 현재 Unix timestamp와 비교합니다. 이 도구는 자동으로 비교해 만료 여부를 색상으로 표시하며, 보통 액세스 토큰은 15분~1시간, 리프레시 토큰은 며칠~수주로 설정하는 편입니다.
JWT의 서명 검증도 가능한가요?▼
서명 검증에는 HMAC의 비밀 키 또는 RSA/ECDSA의 공개 키가 필요하며, 키가 노출되면 토큰이 무력화되므로 브라우저에서 수행하는 것은 권장되지 않습니다. 이 도구는 의도적으로 디코딩만 수행하고, 서명 검증은 서버에서 jose, jsonwebtoken 같은 검증된 라이브러리로 진행해야 합니다.