이 도구는 JWT의 헤더·페이로드만 디코드하며 서명은 검증하지 않습니다. 디코드된 토큰이라도 만료됐거나 위조됐거나 유효하지 않을 수 있습니다. 서버 측 검증 없이 JWT 내용을 신뢰하지 마세요.
100% 로컬 처리 — 토큰은 브라우저 안에서만 디코드되며 어디로도 전송되지 않습니다.
발급 시각 (iat)-
만료 시각 (exp)-
JWT(JSON Web Token)란
JWT는 점으로 구분된 세 부분(base64url로 인코딩됨)으로 이뤄진 URL 안전 토큰입니다. 서명 알고리즘을 설명하는 헤더, 클레임(데이터)을 담은 페이로드, 토큰이 변조되지 않았는지 검증하는 서명으로 구성됩니다. 이 도구는 헤더·페이로드를 다시 읽기 쉬운 JSON으로 디코드합니다.
헤더·페이로드는 암호화가 아니라 base64url 인코딩만 되어 있으므로 비밀 키 없이도 누구나 디코드해 읽을 수 있습니다. 이는 설계상 당연한 동작입니다. JWT의 서명이 막는 것은 변조이지 내용을 읽지 못하게 하는 것이 아니므로, 디코더만으로는 토큰이 실제로 유효한지 확인할 수 없습니다.
JWT는 어떻게 디코드하고 exp·iat는 무엇을 뜻하나요?
JWT(JSON Web Token)는 점으로 구분된 세 개의 base64url 인코딩 부분(header.payload.signature)입니다. 디코드하려면 문자열을 점 기준으로 나눈 뒤 헤더·페이로드 부분을 base64url 디코드하고 각각 JSON으로 파싱하면 됩니다. 디코드에는 비밀 키가 필요 없고 서명 검증에만 필요합니다. 페이로드의 iat(발급 시각)·exp(만료 시각) 클레임은 유닉스 타임스탬프(1970-01-01 이후 초)이며, 이 도구는 이를 사람이 읽는 날짜로 변환합니다.
JWT 디코드 단계
- 점으로 구분된 세 부분이 모두 포함된 전체 JWT 문자열을 입력창에 붙여넣습니다.
- 도구가 토큰을 점 기준으로 나눠 첫 번째 부분(헤더)과 두 번째 부분(페이로드)을 base64url 디코드합니다.
- 디코드된 각 부분을 JSON으로 파싱해 읽기 쉽게 정렬해 보여줍니다.
- 페이로드에 iat나 exp 클레임이 있으면 유닉스 타임스탬프를 사람이 읽는 로컬 날짜·시간으로 변환합니다.
- 세 번째 부분(서명)은 그대로 두며 디코드하거나 검사하지 않습니다. 검증하려면 발급자의 비밀 키나 공개 키가 필요한데 이 도구는 이를 갖고 있지 않기 때문입니다.
JWT 구조와 타임스탬프 변환
JWT = base64url(헤더) + "." + base64url(페이로드) + "." + 서명 · 사람이 읽는 날짜 = new Date(exp 또는 iat 초 값 × 1000)
- iat(발급 시각) = 토큰이 생성된 시점을 나타내는 초 단위 유닉스 타임스탬프
- exp(만료 시각) = 이 시점 이후로는 토큰을 만료된 것으로 봐야 하는 초 단위 유닉스 타임스탬프
- base64url = +·/를 -·_로 바꾸고 패딩을 생략한 URL 안전 base64 인코딩 변형
자주 쓰이는 JWT 페이로드 클레임
| 클레임 | 의미 |
|---|
| iss | 발급자 — 토큰을 만들고 서명한 주체 |
| sub | 주체 — 토큰이 가리키는 대상(예: 사용자 ID) |
| aud | 수신자 — 토큰이 의도한 수신 대상 |
| iat | 발급 시각 — 토큰이 생성된 시점(유닉스 타임스탬프) |
| exp | 만료 시각 — 토큰이 더 이상 유효하지 않게 되는 시점(유닉스 타임스탬프) |
자주 묻는 질문
JWT를 디코드하면 그 토큰이 유효하고 신뢰할 수 있다는 뜻인가요?
아니요. 디코드는 헤더·페이로드 안의 내용만 보여줄 뿐, 서명이 진짜인지·신뢰할 수 있는 곳에서 발급됐는지·변조되지 않았는지는 전혀 알려주지 않습니다. 올바른 비밀 키나 공개 키로 서명을 검증해야만 토큰이 진짜인지 확인할 수 있습니다.
비밀번호 없이 왜 아무나 제 JWT 페이로드를 읽을 수 있나요?
헤더·페이로드는 암호화가 아니라 base64url 인코딩만 되어 있어 디코드는 되돌릴 수 있는 텍스트 변환일 뿐 보안 장벽이 아닙니다. JWT를 받는 누구나 내용을 읽을 수 있도록 설계된 것이므로, 이런 이유로 민감한 데이터는 JWT 페이로드에 절대 넣으면 안 됩니다.
토큰의 exp 시각이 과거라면 어떻게 되나요?
exp 값이 과거인 JWT는 이를 검사하는 시스템에서 일반적으로 만료된 것으로 간주해 거부해야 합니다. 다만 이 디코더는 날짜를 표시만 할 뿐 현재 시각과 비교하거나 거부하지는 않습니다. 그 판단은 서버의 책임입니다.
디코드한 토큰에서 왜 오류가 뜨나요?
대개 붙여넣은 텍스트가 완전한 형식의 JWT가 아니기 때문입니다. 점으로 구분된 부분이 빠졌거나, 헤더·페이로드가 올바른 base64url이 아니거나, 디코드한 텍스트가 유효한 JSON이 아닌 경우입니다. 여분의 공백이나 줄바꿈 없이 토큰 전체를 복사했는지 다시 확인하세요.
이 도구는 헤더·페이로드만 디코드해 보여주며 서명을 검증하거나 현재 시각과 만료를 비교하거나 클레임을 검사하지 않습니다. 디코드에 성공했다고 해서 검증되고 신뢰할 수 있는 토큰이라는 뜻은 아닙니다.
근거·출처: RFC 7519 (JSON Web Token)