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 주요 클레임

iss (Issuer): 토큰 발급자
sub (Subject): 토큰 주체 (주로 사용자 ID)
aud (Audience): 토큰 대상
exp (Expiration): 만료 시간 (Unix timestamp)
iat (Issued At): 발급 시간
nbf (Not Before): 토큰 활성화 시간

🛡️ 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 같은 검증된 라이브러리로 진행해야 합니다.

관련 도구

광고