ToolStack
EN

JWT 디코더

토큰의 헤더·페이로드를 열어보고 만료 여부 확인

데이터는 서버로 전송되지 않습니다 — 모든 처리는 브라우저 안에서만 서버 전송 0건

토큰은 브라우저 안에서만 해석되며 서버로 전송되지 않습니다. 다만 이 도구는 서명을 검증하지 않으므로, 토큰이 위조되지 않았는지는 확인할 수 없습니다.

JWT 디코더 사용법

토큰을 붙여넣으면 헤더와 페이로드가 표로 정리되고, exp·iat 같은 시각 클레임은 읽을 수 있는 날짜로 함께 표시됩니다. 만료 여부와 남은 시간도 위쪽에 바로 나오므로 "이 토큰이 아직 살아 있나"를 가장 빨리 확인할 수 있습니다.

JWT의 구조

JWT는 점(.)으로 구분된 세 부분으로 이루어집니다.

  • 헤더 — 서명 알고리즘(alg)과 토큰 타입(typ)
  • 페이로드 — 사용자 식별자와 만료 시각 등 실제 데이터(클레임)
  • 서명 — 앞 두 부분이 변조되지 않았음을 보증하는 값

앞의 두 부분은 Base64URL 인코딩일 뿐 암호화가 아닙니다. 토큰을 가진 사람은 누구나 내용을 볼 수 있으므로, 서버에서만 알아야 할 정보는 절대 페이로드에 넣지 마세요.

자주 쓰이는 표준 클레임

  • iss — 토큰을 발급한 주체
  • sub — 토큰이 가리키는 사용자 식별자
  • aud — 이 토큰을 받아들여야 할 대상
  • exp — 만료 시각. 이 시각이 지나면 서버가 거부해야 함
  • nbf — 이 시각 전에는 유효하지 않음
  • iat — 발급된 시각

exp가 지났는데도 요청이 통과한다면 서버가 만료 검사를 하지 않고 있다는 뜻이므로 점검이 필요합니다. 반대로 방금 발급한 토큰이 거부된다면 서버와 발급자의 시계가 어긋났을 수 있습니다.

자주 묻는 질문

이 도구가 서명도 검증해 주나요?
아니요. 헤더와 페이로드를 디코딩해 내용을 보여줄 뿐 서명은 검증하지 않습니다. 서명 검증에는 비밀키나 공개키가 필요한데, 그 키를 웹페이지에 입력하는 것은 그 자체로 위험합니다. 토큰의 진위 확인은 반드시 서버에서 하세요.
JWT는 암호화된 것 아닌가요?
아닙니다. 흔한 오해인데 JWT의 헤더와 페이로드는 Base64URL로 인코딩됐을 뿐 누구나 디코딩할 수 있습니다. 서명은 "내용이 변조되지 않았음"을 보장할 뿐 "내용을 숨기는" 장치가 아닙니다. 그래서 비밀번호나 주민등록번호 같은 민감 정보를 페이로드에 넣으면 안 됩니다.
exp와 iat는 왜 이상한 숫자로 나오나요?
1970년 1월 1일부터 흐른 초(Unix timestamp)로 저장되기 때문입니다. 밀리초가 아니라 초 단위인 점이 자바스크립트의 Date.now()와 달라 자주 실수하는 부분입니다. 이 도구는 해당 값을 읽을 수 있는 날짜·시각으로 함께 표시합니다.
토큰을 여기에 붙여넣어도 안전한가요?
디코딩은 브라우저 안에서만 이루어지며 토큰은 서버로 전송되지 않습니다. 다만 유효한 운영 토큰은 그 자체가 로그인 자격이므로, 화면 공유 중이거나 공용 PC라면 만료된 토큰이나 개발 환경 토큰으로 확인하는 편이 안전합니다.

관련 툴