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"} 로 디코딩되며, 서명되지 않아 신뢰할 수 없는 토큰으로 보고됩니다.

이 도구 사용 방법

  1. 토큰 붙여넣기

    JWT를 인코딩된 JWT 에 붙여 넣으면 바로 디코딩이 시작됩니다.

  2. 헤더와 페이로드 확인

    정리된 헤더 와 페이로드, 알고리즘 배지, 페이로드 아래의 발급·유효 시작·만료 날짜를 확인합니다.

  3. 서명 검증

    서명 검증 에서 HMAC 시크릿 또는 PEM 공개 키를 시크릿 / RSA 공개 키 에 입력합니다. 상태 표시가 서명의 유효 여부를 알려 줍니다.

팁 및 모범 사례

  • JWT는 누구나 디코딩할 수 있습니다. 비밀번호 같은 비밀 정보를 페이로드에 넣지 마세요.
  • HMAC 시크릿은 입력한 그대로 사용됩니다. 백엔드가 base64로 인코딩해 저장한다면 먼저 디코딩하세요. base64 문자열을 그대로 붙여 넣으면 “잘못된 서명”이 됩니다.
  • RS* 토큰에는 개인 키가 아니라 공개 키를 붙여 넣으세요. X.509 인증서는 받지 않으므로 먼저 공개 키를 추출해야 합니다.
  • 만료 여부는 기기 시계와 비교하므로 시스템 시간이 틀리면 “만료” 표시도 틀립니다.
  • 테스트용 토큰이 필요하면 JWT 인코더에서 만들 수 있습니다.