JWT 디코더
브라우저에서 JWT 헤더와 페이로드를 디코딩하고 exp/nbf/iat 날짜를 확인하며 HS256/384/512, RS256/384/512 서명을 검증합니다. 토큰은 기기 밖으로 나가지 않습니다.
입력 내용과 파일은 브라우저 밖으로 전송되지 않습니다
JWT(header.payload.signature)를 붙여넣거나 데모 토큰을 불러오세요.
- 헤더
- 페이로드
- 서명
서명 검증
토큰을 붙여넣으면 헤더, 페이로드, 시간 클레임이 여기에 표시됩니다.
시간 검사로는 진위를 확인할 수 없습니다.
이 페이지에서
JSON Web Token을 붙여 넣으면 헤더와 페이로드가 정리된 JSON으로 표시되고, 서명 알고리즘과 토큰의 발급·유효 시작·만료 시점을 알 수 있습니다. 공유 시크릿이나 RSA 공개 키로 서명을 검증할 수도 있습니다.
상세 기능
디코딩은 입력과 동시에 이루어집니다. 헤더와 페이로드는 base64url로 디코딩되어 토큰의 원래 클레임 순서대로 보기 좋게 표시됩니다. HTTP 헤더에서 복사한 앞부분의 Bearer 와 줄바꿈은 자동으로 제거됩니다. 등록된 시간 클레임 exp, nbf, iat 는 로컬 시간대의 날짜로 표시되며, 만료되었거나 아직 유효하지 않은 토큰은 표시됩니다.
서명 검증은 WebAssembly로 컴파일된 Rust 암호화 모듈에서 실행되며 토큰 헤더에 적힌 알고리즘을 사용합니다. HS256, HS384, HS512는 공유 시크릿(UTF-8 텍스트로 사용)으로, RS256, RS384, RS512는 PEM 형식의 RSA 공개 키(BEGIN PUBLIC KEY 또는 BEGIN RSA PUBLIC KEY)로 검증합니다. 대신 JWK 또는 JWKS(예: ID 공급자의 /.well-known/jwks.json)를 붙여넣으면 토큰의 kid로 키를 고르고(kid가 없으면 알고리즘에 맞는 모든 키를 시도) 브라우저의 Web Crypto API로 검증합니다. PS256/384/512, ES256/384/512, EdDSA(Ed25519)도 지원합니다. alg: none 토큰은 항상 서명되지 않은 것으로 보고되며 유효하다고 표시되지 않습니다.
토큰과 키는 페이지 안에만 머무르며 서버로 전송되거나 저장되지 않습니다. 디코딩만으로는 진위를 증명할 수 없고, 검증된 서명만이 이를 보여 준다는 점을 기억하세요.
실용적인 예제
jwt.io 샘플: 토큰 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIi… 은 헤더 {"alg":"HS256","typ":"JWT"} 와 sub, name, iat 가 담긴 페이로드로 디코딩됩니다. 시크릿 your-256-bit-secret 을 넣으면 “서명 검증됨”, 다른 시크릿이면 “잘못된 서명”이 표시됩니다.
만료된 토큰: 페이로드에 "exp": 1767225600 이 있으면 2026년 1월 1일에 만료된 것으로 표시됩니다(로컬 시간대 기준).
Authorization 헤더에서: Bearer eyJ… 를 그대로 붙여 넣어도 됩니다. 디코딩 전에 접두사와 줄바꿈이 제거됩니다.
서명되지 않은 토큰: eyJhbGciOiJub25lIn0.eyJzdWIiOiIxIn0. 은 {"alg":"none"} 과 {"sub":"1"} 로 디코딩되며, 서명되지 않아 신뢰할 수 없는 토큰으로 보고됩니다.
이 도구 사용 방법
토큰 붙여넣기
JWT를 인코딩된 JWT 에 붙여 넣으면 바로 디코딩이 시작됩니다.
헤더와 페이로드 확인
정리된 헤더 와 페이로드, 알고리즘 배지, 페이로드 아래의 발급·유효 시작·만료 날짜를 확인합니다.
서명 검증
서명 검증 에서 HMAC 시크릿 또는 PEM 공개 키를 시크릿 / RSA 공개 키 에 입력합니다. 상태 표시가 서명의 유효 여부를 알려 줍니다.
팁 및 모범 사례
- JWT는 누구나 디코딩할 수 있습니다. 비밀번호 같은 비밀 정보를 페이로드에 넣지 마세요.
- HMAC 시크릿은 입력한 그대로 사용됩니다. 백엔드가 base64로 인코딩해 저장한다면 먼저 디코딩하세요. base64 문자열을 그대로 붙여 넣으면 “잘못된 서명”이 됩니다.
- RS* 토큰에는 개인 키가 아니라 공개 키를 붙여 넣으세요. X.509 인증서는 받지 않으므로 먼저 공개 키를 추출해야 합니다.
- 만료 여부는 기기 시계와 비교하므로 시스템 시간이 틀리면 “만료” 표시도 틀립니다.
- 테스트용 토큰이 필요하면 JWT 인코더에서 만들 수 있습니다.