JWT 디코더 & 서명 검증
JWT(JSON Web Token)를 붙여넣으면 헤더와 페이로드를 즉시 디코딩합니다. 비밀키 또는 공개키를 입력하면 서명(HS256/384/512, RS256/384/512, PS256/384/512, ES256/384/512)까지 검증할 수 있으며, 모든 처리는 서버로 전송하지 않고 브라우저 안에서만 이루어집니다.
🔗 링크 공유는 입력한 토큰 원문만 링크 자체(주소창의 # 뒤)에 담습니다. 비밀키/공개키는 포함되지 않지만, 서버로 전송되지는 않아도 링크를 받은 사람은 토큰 내용을 볼 수 있으니 민감한 토큰은 공유하지 마세요.
여기에 서명 원문(base64url)이 표시됩니다.
키는 서버로 전송되지 않고 브라우저 안에서만 검증에 사용됩니다.
이 배너는 쿠팡 파트너스 활동의 일환으로 게재되며, 이에 따른 일정액의 수수료를 제공받습니다.
사용 방법
- 입력: 위 입력창에 JWT 문자열(점 3개로 구분된 헤더.페이로드.서명)을 붙여넣으세요.
- 확인: 헤더와 페이로드가 자동으로 디코딩되어 트리로 표시됩니다.
exp(만료),iat(발급),nbf(활성 시작) 클레임은 사람이 읽을 수 있는 날짜로 함께 표시되고, 상단 배너에 만료 여부가 나타납니다. - 서명 검증: 서명 값 원문 아래 입력창에 비밀키(HS256/384/512) 또는 PEM 형식 공개키(RS256/384/512, PS256/384/512, ES256/384/512)를 넣고 "서명 검증" 버튼을 누르면 실제로 서명이 유효한지 확인합니다.
모든 처리는 브라우저 내부(JavaScript, Web Crypto API)에서만 이루어지며, 입력한 토큰과 키는 서버로 전송되거나 저장되지 않습니다. HS256과 RS256의 검증 방식이 왜 다른지, 프로덕션에서 흔한 alg 취약점은 무엇인지 궁금하다면 서명 검증 가이드를 참고하세요.
JWT란?
JWT(JSON Web Token)는 두 당사자 간에 정보를 안전하게 전달하기 위한 토큰 형식으로, 헤더.페이로드.서명 세 부분을 점(.)으로 이어 Base64URL로 인코딩한 문자열입니다. 로그인 인증, API 접근 토큰 등에 널리 쓰입니다. 헤더와 페이로드는 단순히 Base64URL로 인코딩된 것뿐이라 누구나 디코딩해 내용을 볼 수 있으므로, 비밀번호 등 민감한 정보를 페이로드에 넣으면 안 됩니다.
자주 묻는 질문
입력한 토큰이 외부로 전송되나요?
아니요. 모든 디코딩은 브라우저 안에서 JavaScript로만 처리되며 서버로 전송되지 않습니다.
서명(Signature)이 유효한지 검증해주나요?
네. 서명 패널 아래에 비밀키(HS256/384/512) 또는 PEM 형식 공개키(RS256/384/512, PS256/384/512, ES256/384/512)를 입력하면 브라우저 내장 Web Crypto API로 실제 서명을 검증합니다. 키는 서버로 전송되지 않고 브라우저를 벗어나지 않습니다. 단, alg가 none인 토큰은 서명 자체가 없으므로 검증할 수 없고 신뢰해서도 안 됩니다.
"올바른 JWT 형식이 아닙니다" 오류는 왜 나오나요?
JWT는 점(.)으로 구분된 정확히 3개 부분(헤더, 페이로드, 서명)으로 이루어져야 합니다. 앞뒤 공백을 포함해 붙여넣었거나 일부가 잘렸을 때 이 오류가 발생할 수 있습니다.
exp가 지났는데도 토큰이 계속 동작해요.
이 도구는 표시용 도구일 뿐이며, 실제 만료 처리는 이 토큰을 사용하는 서버/애플리케이션이 exp 클레임을 검사해야 이루어집니다.
JWT는 세션(Session) 인증과 어떻게 다른가요?
세션 방식은 서버가 로그인 상태를 메모리/DB에 저장하고 클라이언트는 세션 ID만 들고 다닙니다. JWT는 반대로 사용자 정보 자체를 토큰 안에 담아 서명하므로, 서버가 상태를 저장할 필요 없이(Stateless) 서명만 검증하면 됩니다. 대신 발급된 JWT는 만료 전까지 즉시 무효화하기 어렵다는 단점이 있습니다.
왜 JWT에 비밀번호 같은 민감정보를 넣으면 안 되나요?
헤더와 페이로드는 암호화가 아니라 Base64URL 인코딩만 되어 있어서, 이 도구처럼 누구나 손쉽게 디코딩해 내용을 볼 수 있습니다. 서명은 "내용이 변조되지 않았음"만 보장할 뿐 "내용을 숨기는" 기능이 아닙니다.
HS256과 RS256은 검증 방식이 왜 다른가요?
HS256/384/512는 대칭키(HMAC) 방식이라 발급자와 검증자가 같은 비밀키를 공유해야 합니다. 반면 RS256/384/512(RSA)와 ES256/384/512(ECDSA), PS256/384/512(RSA-PSS)는 비대칭키 방식이라 발급자는 개인키로 서명하고, 검증자는 공개키만으로 검증할 수 있어 비밀키를 공유할 필요가 없습니다. 이 도구는 alg 값을 읽어 자동으로 필요한 입력(비밀키 또는 공개키)을 안내합니다.