이게 뭔가요?
JWT(JSON Web Token)는 점(.)으로 구분된 세 부분 — 헤더, 페이로드, 서명 — 으로 이뤄진 인증 토큰입니다. 앞의 두 부분은 base64url로 인코딩된 JSON일 뿐이라 누구나 내용을 읽을 수 있습니다. 이 도구는 토큰을 붙여넣으면 헤더와 페이로드를 보기 좋은 JSON으로 풀어주고, exp(만료) 값을 사람이 읽는 시각으로 바꿔 만료 여부까지 표시합니다. 서명 검증은 하지 않으며, 비밀키 없이 브라우저 안에서 디코딩만 합니다.
언제 쓰나요?
로그인 토큰에 어떤 클레임(사용자 ID, 권한, 만료 시각)이 들어 있는지 확인할 때, “왜 401이 뜨지?” 하며 토큰이 만료됐는지 볼 때, 또는 백엔드가 넣어준 커스텀 클레임을 프론트에서 확인할 때 씁니다.
실무에서 자주 틀리는 점
- 디코딩 ≠ 검증. 페이로드를 읽을 수 있다고 신뢰해서는 안 됩니다. 서명 검증 없이 클레임을 믿으면 위조 토큰에 당합니다. 검증은 반드시 서버에서 비밀키로 해야 합니다.
- 민감 정보 저장. 페이로드는 누구나 읽으므로 비밀번호나 개인정보를 넣으면 안 됩니다.
- exp 단위.
exp·iat는 초 단위 Unix 타임스탬프입니다. 밀리초로 비교하면 항상 만료로 판정됩니다. - 알고리즘 none.
alg: none을 허용하는 취약한 검증 구현은 서명을 통째로 무력화합니다.
알아두기 — 401이 계속 뜰 때 가장 먼저 확인할 것은 토큰의
exp입니다. 유닉스 초 단위라 눈으로는 읽기 어렵지만, 디코더에 넣으면 만료 시각이 날짜로 표시되고 이미 지났는지 바로 보입니다. 또 하나, JWT의 페이로드는 서명만 되어 있을 뿐 암호화되지 않아 누구나 읽을 수 있습니다. 이메일·권한·내부 ID처럼 노출되면 곤란한 값은 페이로드에 넣지 않는 것이 원칙입니다.