본문으로 건너뛰기
ZEKILO Dev

JWT 디코더

JWT를 붙여 넣으면 헤더와 페이로드를 풀어 보여 주고, 만료 시각을 날짜로 알려 줍니다.

입력값은 브라우저 밖으로 나가지 않음RFC 7519RFC 7515기준일 2026.10.03

디코딩은 서명 검증이 아닙니다. JWT 내용은 누구나 읽을 수 있으니 비밀 정보를 넣지 마세요.

JWT

Esc를 누른 뒤 Tab을 누르면 입력란에서 나갑니다.

헤더

페이로드

서명

서명
Base64URL—
길이—
알고리즘 (alg)—

비밀 키는 이 브라우저 안에서만 쓰고 저장하지 않습니다.

JWT 디코더 사용 방법

  1. 1입력 칸에 JWT를 붙여 넣거나 「예시 넣기」를 누릅니다. 앞에 Bearer 가 붙어 있어도 됩니다.
  2. 2헤더와 페이로드, exp·nbf·iat 날짜를 확인합니다. 시간대를 바꾸면 날짜 표기가 바뀝니다.
  3. 3「복사」로 헤더나 페이로드를 복사하거나 「내려받기」로 페이로드를 .json 파일로 저장합니다.

JWT 디코더 옵션

시간대
exp·nbf·iat 날짜를 보일 시간대입니다. 브라우저(기본), UTC, KST, JST 가운데 고릅니다. 브라우저 시간대는 UTC+09:00처럼 UTC와의 차이로 표기합니다.
HS256·HS384·HS512 서명 검증용 비밀 키
비밀 키를 넣으면 HMAC 서명이 맞는지 계산해 「서명 일치」 또는 「서명 불일치」로 알려 줍니다. 비밀 키는 저장하지 않습니다. RS256·ES256 같은 공개 키 알고리즘은 검증하지 않습니다.

JWT의 구조

JWT는 RFC 7519가 정한 토큰 형식이고, 가장 흔한 서명 토큰(JWS)의 모양은 RFC 7515가 정합니다. header.payload.signature처럼 점으로 나눈 세 부분이며 각 부분은 패딩 없는 Base64URL입니다. 헤더에는 서명 알고리즘(alg)이, 페이로드에는 클레임(sub, exp 등)이 JSON으로 들어 있습니다.

exp(만료), nbf(유효 시작), iat(발급)는 1970-01-01 00:00:00 UTC부터 센 초입니다. 이 도구는 이 값을 고른 시간대의 날짜로 바꾸고, 지금 시각과 비교해 만료 여부를 알려 줍니다. 현재 시각이 exp와 같거나 그보다 뒤면 만료입니다.

디코딩과 서명 검증은 다릅니다

디코딩은 서명 검증이 아닙니다. JWT 내용은 누구나 읽을 수 있으니 비밀 정보를 넣지 마세요. 헤더와 페이로드는 암호화된 것이 아니라 Base64URL로 적힌 JSON이라서, 토큰을 본 사람은 키가 없어도 내용을 읽습니다.

서명은 내용이 바뀌지 않았는지 확인하는 장치입니다. HS256·HS384·HS512는 비밀 키 하나로 서명하고 확인하는 HMAC 방식(RFC 7518)이라, 비밀 키를 넣으면 이 브라우저에서 서명이 맞는지 계산해 볼 수 있습니다. 실제 서비스에서는 서버가 서명과 함께 exp, 발급자(iss), 대상(aud)을 모두 확인해야 합니다.

JWT 디코더 예시

  • Bearer 접두어가 붙은 토큰의 헤더

    Authorization 헤더 값을 그대로 붙여 넣어도 Bearer 와 앞뒤 공백을 떼고 읽습니다.

    입력

    Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IlpFS0lMTyIsImlhdCI6MTc2NzIyNTYwMCwiZXhwIjoxNzY3MjI5MjAwfQ.218DR4r7DRNkKO3XJcQYXE0ztwbqxYMeQpkIp9S18oE

    출력

    {
      "alg": "HS256",
      "typ": "JWT"
    }
  • 같은 토큰의 페이로드

    iat 1767225600은 2026-01-01 00:00:00 UTC, exp 1767229200은 2026-01-01 01:00:00 UTC입니다. 2026-10-02 기준으로는 만료된 토큰입니다.

    입력

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IlpFS0lMTyIsImlhdCI6MTc2NzIyNTYwMCwiZXhwIjoxNzY3MjI5MjAwfQ.218DR4r7DRNkKO3XJcQYXE0ztwbqxYMeQpkIp9S18oE

    출력

    {
      "sub": "1234567890",
      "name": "ZEKILO",
      "iat": 1767225600,
      "exp": 1767229200
    }
  • 비밀 키로 서명 확인 (HS256)

    비밀 키 zekilo-secret 을 넣은 경우입니다. 다른 키(예: wrong)를 넣으면 「서명 불일치」가 나옵니다.

    입력

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IlpFS0lMTyIsImlhdCI6MTc2NzIyNTYwMCwiZXhwIjoxNzY3MjI5MjAwfQ.218DR4r7DRNkKO3XJcQYXE0ztwbqxYMeQpkIp9S18oE

    출력

    서명 일치
  • JWT 형식이 아닌 입력

    입력

    abc.def

    출력

    점으로 나눈 부분이 2개입니다. JWT는 세 부분입니다.

예시는 이 도구를 검증하는 기준 사례의 값입니다.

JWT 디코더 자주 묻는 질문

입력값이 서버로 전송되나요?

아니요. 입력과 결과는 이 브라우저 안에서만 처리되며 저장하지도 않습니다. 새로 고침하면 사라집니다.

디코딩되면 올바른 토큰이라는 뜻인가요?

아닙니다. 디코딩은 서명 검증이 아닙니다. JWT 내용은 누구나 읽을 수 있으니 비밀 정보를 넣지 마세요. 헤더와 페이로드는 Base64URL로 적혀 있을 뿐이라 키가 없어도 읽힙니다. 토큰을 믿어도 되는지는 서버가 서명과 exp 등을 확인해서 판단해야 합니다.

토큰이 언제 만료되는지 어떻게 보나요?

페이로드의 exp가 만료 시각입니다. 이 도구는 exp·nbf·iat의 숫자(1970-01-01 UTC부터 센 초)를 날짜로 바꿔 보여 주고, exp가 지났으면 「만료됨 (n일 전)」, nbf가 아직 오지 않았으면 「아직 유효하지 않음」으로 표시합니다.

「서명이 없는 토큰입니다」 경고는 무엇인가요?

헤더의 alg가 none이면 서명이 없는 토큰입니다. 누가 썼는지, 중간에 바뀌지 않았는지 확인할 방법이 없으므로 서버는 이런 토큰을 받아들이면 안 됩니다.

RS256·ES256 토큰도 검증하거나 토큰을 만들 수 있나요?

서명 검증은 비밀 키를 쓰는 HS256·HS384·HS512만 지원합니다. RS256·ES256 같은 공개 키 방식의 토큰은 내용만 읽을 수 있습니다. 토큰을 만들거나 다시 서명하는 기능은 없습니다.

「JWT 형식이 아닙니다」라고 나옵니다.

JWT는 점으로 나눈 header.payload.signature 세 부분이고 각 부분은 Base64URL입니다. 부분이 세 개가 아니거나 Base64URL이 아닌 글자가 있으면 오류로 알려 줍니다. 다섯 부분으로 된 암호화 토큰(JWE)은 키 없이는 내용을 볼 수 없어 해독하지 않습니다.

처리 방식·표준

  • 처리 위치: 이 브라우저 (내 기기). 전송하거나 저장하지 않습니다.
  • 표준: RFC 7519 · RFC 7515
  • 엔진: ZEKILO Dev Base64URL 디코더·JSON 출력기 (자체 구현) · Web Crypto API (HMAC 서명 검증) (브라우저 내장)
  • 헤더와 페이로드의 숫자는 적힌 그대로 보여 줍니다. 큰 정수도 바뀌지 않습니다.
  • exp가 현재 시각과 같거나 지났으면 만료로 봅니다.
  • 비밀 키는 UTF-8 텍스트로 읽습니다.
  • 기준일 2026.10.03
  • 변경 이력: 2026.10.03 처음 공개
오픈소스 라이선스 →
결과가 이상한가요? 오류 신고하기(입력값은 첨부되지 않습니다)