왜 만들었나요
토큰이 점 두 개로 이어진 긴 문자열이라, 사용자 ID가 뭐로 들어갔는지 만료가 언제인지 그냥 봐서는 하나도 안 보였습니다. 디버깅할 때마다 콘솔에 코드를 쳐서 풀어 보는 게 번거로워 만들었습니다.
로그인 토큰을 붙여넣으면 안에 든 정보를 읽을 수 있는 형태로 풀어 줍니다. 만료 시각도 사람이 읽는 날짜로 바꿔 보여 줍니다.
로딩 중...
토큰이 점 두 개로 이어진 긴 문자열이라, 사용자 ID가 뭐로 들어갔는지 만료가 언제인지 그냥 봐서는 하나도 안 보였습니다. 디버깅할 때마다 콘솔에 코드를 쳐서 풀어 보는 게 번거로워 만들었습니다.
Note
붙여넣은 토큰은 서버로 전송되지 않습니다. 푸는 처리가 전부 브라우저 안에서 이뤄져, 실제 로그인 토큰을 넣어도 기기 밖으로 나가지 않습니다.
입력창에 토큰을 통째로 붙여넣습니다.

헤더와 페이로드가 JSON으로 풀려 나옵니다. 만료 시각은 날짜로 함께 표시됩니다.

로그인 응답으로 받은 토큰을 넣으면 이렇게 나옵니다.
넣은 것 나온 것
eyJhbGciOiJIUzI1NiJ9. 헤더 { "alg": "HS256", "typ": "JWT" }
eyJzdWIiOiIxMjM0Iiwi → 페이로드 { "sub": "1234", "exp": 1767225600 }
ZXhwIjoxNzY3MjI1NjAwfQ. exp 2026-01-01 09:00:00
_abc123signature
점(.)을 기준으로 나뉩니다.
| 조각 | 담긴 것 |
|---|---|
| 헤더 | 어떤 방식으로 서명했는지 |
| 페이로드 | 사용자 ID, 권한, 만료 시각 등 |
| 서명 | 내용이 위조되지 않았음을 확인하는 값 |
앞의 두 조각은 암호화가 아니라 단순 변환이라, 누구나 풀어 읽을 수 있습니다. 이 도구가 하는 일도 그 변환을 되돌리는 것뿐입니다.
이 도구는 내용을 읽어 줄 뿐 서명은 확인하지 않습니다. 누군가 페이로드를 고쳐 만든 가짜 토큰도 여기서는 똑같이 풀립니다.
페이로드는 누구나 읽을 수 있습니다. 비밀번호·주민번호·내부 키 같은 걸 넣으면 그대로 노출됩니다. 토큰에는 식별자와 권한 정도만 담는 게 원칙입니다.
exp 값이 만료 시각입니다. 이 도구가 날짜로 바꿔 보여 주므로 지금보다 이전이면 만료된 토큰입니다. iat는 발급 시각입니다.
로그인 상태를 담아 서버와 앱이 주고받는 토큰입니다. 서버가 발급하고, 이후 요청마다 이 토큰을 보내 "누구인지"를 증명합니다.
토큰 가운데 조각으로, 실제 정보가 담긴 부분입니다. 사용자 ID·권한·만료 시각 등이 들어갑니다. 암호화되어 있지 않다는 점이 중요합니다.
토큰이 중간에 고쳐지지 않았음을 확인하는 값입니다. 서버만 아는 비밀키로 만들기 때문에, 내용을 고치면 서명이 맞지 않아 서버가 거부합니다.
아니요, 필요하지 않습니다. JWT의 헤더와 페이로드는 암호화(Encryption)된 것이 아니라 단순히 Base64URL 방식으로 인코딩(Encoding)된 텍스트입니다. 따라서 시크릿 키나 프라이빗 키가 없어도 누구나 디코딩 도구를 이용해 내부의 데이터를 평문으로 읽어볼 수 있습니다.
JWT는 데이터의 '기밀성'이 아니라 '무결성'을 보장하기 위한 기술입니다. 내용 자체는 누구나 읽을 수 있으므로 비밀번호나 개인 식별 정보 같은 민감한 데이터를 페이로드에 넣으면 매우 위험합니다. 보안이 필요한 데이터는 토큰에 담지 않고, 서명을 통해 토큰이 중간에 변조되지 않았음을 증명하는 데 목적을 두어야 합니다.
정상적인 JWT는 항상 점(.)을 기준으로 3개의 파트로 나뉘어 있어야 하며, Base64URL 문자셋(알파벳, 숫자, 하이픈(-), 언더스코어(_))만 포함해야 합니다. 복사 과정에서 공백이 섞였거나, 일반 Base64 인코딩 결과물인 '+', '/', '=' 문자가 포함되어 있는지 확인해 보세요.
마지막 업데이트: 2026년 8월