JWT 디코더
JWT(JSON Web Token)를 디코딩하여 Header, Payload, Signature를 확인합니다. 토큰의 만료 시간과 클레임 정보를 쉽게 확인할 수 있습니다.
토큰 구조
Header
Payload
Signature
HMAC 알고리즘(HS256, HS384, HS512)만 지원됩니다.
클레임 상세
표준 클레임 (Registered Claims)
iss
-
발급자 (Issuer)
sub
-
주제 (Subject)
aud
-
대상 (Audience)
exp
-
만료 시간 (Expiration)
nbf
-
유효 시작 시간 (Not Before)
iat
-
발급 시간 (Issued At)
jti
-
토큰 ID (JWT ID)
JWT 디코더 안내
JWT(JSON Web Token)란?
JWT는 JSON 형식의 데이터를 안전하게 전송하기 위한 개방형 표준(RFC 7519)입니다. 웹 애플리케이션에서 사용자 인증, 권한 부여, 정보 교환에 널리 사용됩니다. JWT는 Header(알고리즘 정보), Payload(실제 데이터), Signature(서명) 세 부분으로 구성되고, 각 부분이 점(.)으로 연결된 문자열입니다. 서버는 비밀키로 서명을 검증해서 토큰이 변조되지 않았는지 확인합니다.
이용 가이드
- JWT 토큰 문자열을 입력창에 붙여넣습니다. 클립보드에서 바로 붙여넣기하면 자동 디코딩됩니다.
- '디코딩' 버튼을 클릭하면 Header, Payload, Signature가 JSON 형태로 분리 표시됩니다.
- 토큰 상태 표시에서 현재 토큰이 유효한지, 만료되었는지 확인합니다.
- 클레임 상세 섹션에서 각 클레임의 키, 값, 설명을 확인합니다.
- 서명을 검증하고 싶다면 비밀키 입력 후 '서명 검증' 버튼을 클릭하세요.
핵심 기능
- JWT 토큰의 Header, Payload, Signature를 분리하여 보기 쉽게 표시
- 토큰 만료 상태(유효, 만료, 아직 유효하지 않음) 자동 판별
- 남은 유효 시간 또는 만료 이후 경과 시간 표시
- 등록 클레임(sub, iss, aud, exp, iat, nbf, jti)의 의미 설명
- HMAC 기반 알고리즘(HS256/384/512) 서명 검증
- 붙여넣기 시 자동 디코딩으로 빠른 작업 가능
이런 상황에서 유용해요
- API 개발 중 인증 토큰의 Payload 내용을 빠르게 확인할 때
- 토큰 만료 시간을 디버깅하거나 유효 기간을 점검할 때
- 다른 서비스에서 받은 JWT의 클레임 구조를 파악할 때
- OAuth 2.0 플로우에서 발급된 액세스 토큰을 분석할 때
- 서명 알고리즘이 올바른지 확인하고 비밀키로 검증할 때
궁금한 점 모음
Q: JWT를 디코딩하면 내용이 노출되는데 안전한가요?
JWT의 Header와 Payload는 Base64 인코딩이라 누구든 디코딩할 수 있습니다. 그래서 민감한 정보는 JWT에 담으면 안 됩니다. JWT의 보안 핵심은 서명 검증입니다. 서명이 유효해야만 내용을 신뢰할 수 있습니다.
Q: exp, iat, nbf 클레임은 각각 무엇인가요?
exp(Expiration)는 토큰 만료 시간, iat(Issued At)는 발급 시간, nbf(Not Before)는 유효 시작 시간입니다. 모두 Unix Timestamp(초 단위)로 표현됩니다. 이 도구에서는 이 값을 사람이 읽을 수 있는 날짜 형식으로 변환해서 보여줍니다.
Q: RS256과 HS256의 차이점은 무엇인가요?
HS256은 대칭키 알고리즘으로, 서명과 검증에 같은 비밀키를 사용합니다. RS256은 비대칭키 알고리즘으로, 개인키로 서명하고 공개키로 검증합니다. 이 도구는 HMAC 계열(HS256/384/512)만 서명 검증을 지원합니다.
Q: sub, iss, aud 클레임은 어떤 용도인가요?
sub(Subject)는 토큰이 나타내는 주체(보통 사용자 ID), iss(Issuer)는 토큰을 발급한 주체, aud(Audience)는 토큰을 사용할 대상을 지정합니다. 모두 선택 사항이지만, 보안과 토큰 관리를 위해 포함하는 것이 좋습니다.
Q: 토큰이 만료된 후에도 디코딩할 수 있나요?
네, 만료 여부와 관계없이 토큰의 내용은 언제든 디코딩해서 볼 수 있습니다. 만료는 서버가 토큰을 받아들일지 결정하는 기준이지, 디코딩 가능 여부와는 무관합니다.
Q: 서명 검증에 실패하면 어떤 의미인가요?
입력한 비밀키가 토큰 생성 시 사용된 키와 다르거나, 토큰 내용이 중간에 변조되었을 가능성이 있습니다. 서명 검증 실패한 토큰은 신뢰할 수 없으므로 사용하면 안 됩니다.
Q: jti 클레임은 무엇인가요?
jti(JWT ID)는 토큰의 고유 식별자입니다. 같은 토큰이 재사용(리플레이 공격)되는 것을 방지하기 위해 사용됩니다. 서버에서 이미 사용된 jti를 추적하면 토큰 재사용을 차단할 수 있습니다.
Q: 입력한 토큰이나 비밀키가 외부로 전송되나요?
아닙니다. 모든 디코딩과 서명 검증은 브라우저 내에서만 처리됩니다. 입력한 토큰이나 비밀키는 서버로 전송되지 않으므로 안심하고 사용할 수 있습니다.
알아두면 좋은 점
- JWT의 Payload는 Base64로 인코딩된 것이지 암호화된 것이 아닙니다. 비밀번호 같은 민감 정보는 절대 넣지 마세요.
- 서명 검증은 HMAC 알고리즘(HS256/384/512)만 지원합니다. RSA나 EC 서명은 별도 도구가 필요합니다.
- 모든 디코딩과 검증은 브라우저에서 처리되며, 토큰이 서버로 전송되지 않습니다.
- 토큰에 exp 클레임이 없으면 만료되지 않는 토큰으로 간주됩니다. 보안상 항상 만료 시간을 설정하는 것이 좋습니다.
- 프로덕션 비밀키를 이 도구에 입력하는 것은 피하세요. 테스트용 키를 사용하는 것을 권장합니다.