디코딩은 토큰 내용을 보여 줄 뿐입니다. 올바른 키로 서명을 확인해야 검증된 토큰입니다.
JWT 디코더는 JSON Web Token을 헤더, 페이로드, 서명으로 나누고 클레임을 읽기 쉬운 JSON으로 보여 줍니다. exp, iat, nbf는 현지 시간으로 바꿔 표시합니다. HS, RS, PS, ES 서명 검증과 HS256 토큰 생성도 지원하며, 모든 처리는 브라우저의 Web Crypto API로 이루어집니다.
사용법
- JWT를 붙여 넣으세요. 붙여 넣는 즉시 헤더, 페이로드, 서명이 색으로 구분되어 디코딩됩니다.
- 클레임을 확인하세요. exp, iat, nbf는 현지 시각과 함께 “3시간 후”, “2일 전”처럼 표시됩니다.
- 서명을 검증하려면 시크릿(HS256/384/512)을 입력하거나 공개 키를 PEM, X.509 인증서, JWK 형식으로 붙여 넣으세요(RS, PS, ES 알고리즘).
- 헤더나 페이로드를 누르면 보기 좋게 정리된 JSON으로 복사됩니다.
- 생성으로 바꾸면 원하는 페이로드와 시크릿으로 새 HS256/384/512 토큰에 서명할 수 있습니다.
- 데이터는 브라우저 밖으로 나가지 않습니다. 디코딩과 검증은 브라우저에 내장된 Web Crypto API로 처리하며 토큰과 키는 저장하거나 전송하지 않습니다.
- JWT는 누구나 디코딩할 수 있습니다. 페이로드는 Base64URL로 인코딩만 되어 있을 뿐 암호화되지 않으니 비밀 정보를 넣지 마세요.
- alg가 “none”인 토큰에는 서명이 전혀 없습니다. 서버는 반드시 거부해야 합니다.
- 지원 알고리즘: HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512. JWKS({"keys": […]})도 지원하며 kid로 키를 고릅니다.
- 일부 서비스처럼 시크릿을 Base64로 인코딩해 보관한다면 “Base64 시크릿”을 켜세요.
JWT의 구조
JWT(RFC 7519)는 Base64URL로 인코딩한 세 문자열을 점으로 이은 것입니다(헤더.페이로드.서명). 헤더에는 {"alg":"HS256","typ":"JWT"}처럼 알고리즘이 들어갑니다. 페이로드에는 sub(주체), iss(발급자), aud(대상), exp(만료), iat(발급 시각), nbf(유효 시작) 같은 클레임이 들어갑니다. 시간은 1970년 1월 1일 UTC부터의 초 단위로, exp 1767225600은 2026년 1월 1일 0시(UTC)입니다.
서명은 앞의 두 부분을 대상으로 계산합니다. HS256은 공유 비밀키로 만든 HMAC-SHA256, RS256과 PS256은 RSA 서명, ES256은 P-256 곡선의 ECDSA 서명입니다(RFC 7518).
디코딩과 검증은 다릅니다
Base64URL은 암호화가 아니라 인코딩이라서 JWT 내용은 누구나 읽을 수 있습니다. 페이로드에 비밀번호나 개인정보를 넣으면 안 됩니다. 올바른 키로 서명이 확인되고 exp와 nbf 기간 안에 있을 때만 토큰을 믿을 수 있습니다. alg가 none인 토큰은 서명이 없으므로 서버에서 거부해야 합니다. HS256 비밀키는 32바이트 이상의 무작위 값을 권장합니다.
입력할 수 있는 키
HS256, HS384, HS512는 공유 비밀키를 텍스트나 Base64로 입력합니다. RS, PS, ES 계열은 공개키를 PEM, X.509 인증서, JWK, JWKS 전체 중 하나로 붙여 넣으면 되고, JWKS에서는 헤더의 kid로 키를 고릅니다. 토큰과 키는 저장하거나 전송하지 않습니다.
자주 묻는 질문
여기에 JWT를 붙여 넣어도 안전한가요?
네. 디코딩과 검증은 브라우저 안에서 이루어지고 토큰은 전송하거나 저장하지 않습니다. 다만 운영 환경 토큰은 비밀번호처럼 다루고, 가능하면 만료된 토큰이나 테스트 토큰을 쓰세요.
비밀키 없이도 JWT를 디코딩할 수 있나요?
네. 헤더와 페이로드는 Base64URL로 인코딩만 되어 있어 누구나 읽을 수 있습니다. 비밀키나 공개키는 서명을 검증할 때만 필요합니다.
JWT 만료 시간(exp 클레임)은 무엇인가요?
exp는 만료 시각으로, 1970년 1월 1일 UTC부터의 초로 표시합니다. 이 시각이 지나면 토큰을 거부해야 합니다. 이 도구에서는 현지 시간과 함께 2일 전 만료 같은 문구로 보여 줍니다.
HS256과 RS256은 어떻게 다른가요?
HS256은 발급자와 검증자가 같은 비밀키를 공유해 서명합니다. RS256은 RSA 개인키로 서명하고 공개키로 검증하므로 검증하는 쪽은 서명 키를 가질 필요가 없습니다.
서명 검증이 실패하는 이유는 무엇인가요?
비밀키가 틀렸거나 Base64로 저장된 값을 그대로 넣은 경우, 공개키가 kid와 맞지 않는 경우, 서명 후 토큰이 바뀐 경우가 대부분입니다. 비밀키가 Base64로 저장돼 있다면 Base64 시크릿 옵션을 켜세요.
여기서 JWT를 만들 수 있나요?
네. 생성 탭에서 페이로드와 비밀키로 HS256, HS384, HS512 토큰에 서명할 수 있습니다. RSA와 EC 서명은 개인키가 필요해서 지원하지 않습니다.