JWT 디코더
JWT 토큰의 헤더와 페이로드를 읽고 만료 시각을 한국 시간으로 보여 줍니다. 토큰은 이 브라우저 밖으로 나가지 않습니다.
헤더
페이로드
자주 보는 페이로드 항목(클레임)
| 키 | 이름 | 뜻 |
|---|---|---|
iss | 발급자 | 토큰을 만든 서버 |
sub | 주체 | 사용자 ID 등 토큰의 주인 |
aud | 대상 | 토큰을 받을 서비스 |
exp | 만료 시각 | 이 시각이 지나면 거절해야 함 (초 단위 타임스탬프) |
nbf | 사용 시작 | 이 시각 전에는 거절해야 함 |
iat | 발급 시각 | 토큰을 만든 시각 |
jti | 토큰 ID | 토큰마다 다른 고유값 |
exp·nbf·iat은 한국 시간으로 바꿔 보여 주고, 만료됐는지와 남은 시간도 알려 줍니다.
이럴 때 씁니다
- 로그인 후 받은 토큰에 어떤 권한(role)이 들어 있는지 볼 때
- 토큰이 언제 만료되는지 확인할 때
- API가 401을 돌려줄 때 토큰의 대상(aud)·발급자(iss)를 확인할 때
코드로 하려면
코드에서 페이로드만 읽을 때는 Base64URL을 디코딩합니다. 서명 검증은 jsonwebtoken(Node.js), PyJWT(파이썬) 같은 라이브러리로 서버에서 하세요.
// 브라우저: 페이로드 읽기 (검증 아님)
const part = token.split(".")[1].replace(/-/g, "+").replace(/_/g, "/");
const json = new TextDecoder().decode(Uint8Array.from(atob(part), c => c.charCodeAt(0)));
JSON.parse(json);다른 개발·데이터 도구
자주 묻는 질문
JWT는 어떻게 생겼나요?
점(.)으로 나뉜 세 부분입니다. 헤더(알고리즘)와 페이로드(담긴 정보)는 Base64URL로 인코딩한 JSON이고, 마지막은 서명입니다. 헤더와 페이로드는 누구나 디코딩해서 읽을 수 있습니다.
서명도 검증하나요?
아니요. 이 도구는 내용을 읽기만 합니다. 서명이 맞는지는 비밀 키나 공개 키가 있는 서버에서 확인해야 하고, 디코딩된다고 해서 믿을 수 있는 토큰은 아닙니다.
JWT의 단점은 무엇인가요?
한 번 발급하면 만료 전까지 서버에서 바로 무효로 만들기 어렵고, 탈취되면 만료될 때까지 쓸 수 있습니다. 담은 정보가 많을수록 요청마다 보내는 크기도 커집니다. 그래서 만료 시간을 짧게 두고 리프레시 토큰을 함께 씁니다.
JWT와 세션은 무엇이 다른가요?
세션은 서버가 로그인 상태를 저장하고 브라우저는 세션 ID만 가집니다. JWT는 정보와 서명을 토큰 안에 담아 서버가 상태를 저장하지 않아도 됩니다. 대신 강제 로그아웃 같은 처리는 세션이 더 쉽습니다.
토큰을 붙여넣어도 안전한가요?
디코딩은 이 브라우저 안에서만 하고 토큰을 서버로 보내지 않습니다. 그래도 운영 환경의 유효한 토큰은 다른 사람과 공유하지 마세요.