JWT 디코더: 토큰 헤더, 페이로드, 만료 시각 확인

  • 무료
  • 가입 불필요
  • 브라우저에서 실행
  • 마지막 업데이트 2026-10-07
문제 신고

JWT를 붙여 넣어 안에 무엇이 들어 있는지, 언제 발급되고 언제 만료되는지 확인하고, 필요하면 서명까지 검증하세요.

입력한 내용은 브라우저 안에서만 처리되며 서버로 전송되지 않습니다.

사용 방법

  1. 토큰을 입력창에 붙여 넣습니다. 앞의 Bearer와 줄바꿈은 자동으로 지워집니다. 예시 불러오기로 샘플 토큰을 써 볼 수 있습니다.
  2. 헤더와 페이로드, 그 아래의 발급·사용 시작·만료 시각을 확인합니다. 배지가 토큰의 만료 여부를 알려 줍니다.
  3. HS256, HS384, HS512 토큰의 서명을 확인하려면 서명 확인 영역을 열고 비밀키를 입력한 뒤 서명 확인을 누릅니다.

예시

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
→ 헤더 {"alg":"HS256","typ":"JWT"}, 페이로드 {"sub":"1234567890","name":"John Doe","iat":1516239022}
jwt.io에서 쓰는 샘플 토큰입니다. iat 1516239022는 2018-01-18T01:30:22Z이고 만료 클레임은 없습니다.
같은 토큰과 비밀키 your-256-bit-secret
→ 이 비밀키로 서명이 유효합니다.
같은 토큰과 비밀키 wrong
→ 이 비밀키와 서명이 일치하지 않습니다.

계산 방식

토큰은 점에서 나뉩니다. 헤더와 페이로드는 Base64url에서 텍스트로 디코딩되어 정리된 JSON으로 표시되며, jose 라이브러리를 씁니다. 세 번째 부분은 서명이고 디코딩하지 않습니다.

상태 배지는 exp와 nbf 클레임을 내 기기의 현재 시각과 비교합니다. exp가 지났으면 만료됨, nbf가 아직 미래이면 아직 유효하지 않음, exp가 미래이면 만료되지 않음, 둘 다 없으면 만료 클레임 없음입니다. 배지는 클레임만 설명하며 토큰이 진짜라는 뜻은 아닙니다.

서명 확인은 헤더에 적힌 알고리즘으로, 입력한 비밀키를 써서 앞의 두 부분의 HMAC을 다시 계산하고 서명과 비교합니다. 여기서는 서명만 확인하며, 만료와 다른 클레임은 이 결과에 포함되지 않습니다.

출처

자주 묻는 질문

JWT 안에는 무엇이 들어 있나요?
점으로 구분된 세 부분입니다. 서명 알고리즘을 알려 주는 헤더, 주체(sub)·발급자(iss)·만료(exp) 같은 클레임이 담긴 페이로드, 그리고 서명입니다. 앞의 둘은 Base64url로 적힌 JSON입니다.
디코딩과 검증은 같은 것인가요?
아니요. 디코딩은 토큰을 읽을 뿐이며 누구나 할 수 있습니다. 페이로드는 암호화가 아니라 인코딩된 것이기 때문입니다. 토큰을 신뢰하려면 서버가 올바른 키로 서명을 검증하고 만료와 다른 클레임도 확인해야 합니다.
시간 클레임은 무엇을 뜻하나요?
exp는 토큰이 효력을 잃는 시각, nbf는 그 전에는 받아들이면 안 되는 시각, iat는 발급된 시각입니다. 세 값 모두 1970년 1월 1일 UTC 이후의 초로 적습니다. 이 도구는 이를 날짜로 보여 주고 현재 시각과 비교해 배지를 정합니다.
HMAC 서명만 확인할 수 있는 이유는 무엇인가요?
HS256, HS384, HS512는 하나의 공유 비밀키를 쓰므로 그 키를 입력해 확인할 수 있습니다. RS256이나 ES256 같은 알고리즘은 발급자의 공개키가 필요한데, 이 도구는 공개키를 받지 않습니다.
토큰을 여기에 붙여 넣어도 안전한가요?
디코딩과 확인은 브라우저 안에서 실행되며 아무것도 전송되지 않습니다. 그래도 유효한 토큰은 만료되기 전까지 비밀번호처럼 쓰일 수 있으니, 직접 관리하지 않는 웹사이트에는 운영 토큰이나 비밀키를 붙여 넣지 말고 테스트 토큰을 쓰세요.

마지막 업데이트: