본문 바로가기

JWT 디코더

로그인 토큰을 붙여넣으면 안에 든 정보를 읽을 수 있는 형태로 풀어 줍니다. 만료 시각도 사람이 읽는 날짜로 바꿔 보여 줍니다.

로딩 중...

왜 만들었나요

토큰이 점 두 개로 이어진 긴 문자열이라, 사용자 ID가 뭐로 들어갔는지 만료가 언제인지 그냥 봐서는 하나도 안 보였습니다. 디버깅할 때마다 콘솔에 코드를 쳐서 풀어 보는 게 번거로워 만들었습니다.

Note

붙여넣은 토큰은 서버로 전송되지 않습니다. 푸는 처리가 전부 브라우저 안에서 이뤄져, 실제 로그인 토큰을 넣어도 기기 밖으로 나가지 않습니다.


사용 방법

  1. 입력창에 토큰을 통째로 붙여넣습니다.

    JWT 디코더-guide-1

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

    JWT 디코더-guide-2

이렇게 나옵니다

로그인 응답으로 받은 토큰을 넣으면 이렇게 나옵니다.

넣은 것                              나온 것
eyJhbGciOiJIUzI1NiJ9.               헤더    { "alg": "HS256", "typ": "JWT" }
eyJzdWIiOiIxMjM0Iiwi        →       페이로드 { "sub": "1234", "exp": 1767225600 }
ZXhwIjoxNzY3MjI1NjAwfQ.             exp     2026-01-01 09:00:00
_abc123signature

알아두면 좋은 것

토큰은 세 조각으로 되어 있습니다

점(.)을 기준으로 나뉩니다.

조각담긴 것
헤더어떤 방식으로 서명했는지
페이로드사용자 ID, 권한, 만료 시각 등
서명내용이 위조되지 않았음을 확인하는 값

앞의 두 조각은 암호화가 아니라 단순 변환이라, 누구나 풀어 읽을 수 있습니다. 이 도구가 하는 일도 그 변환을 되돌리는 것뿐입니다.

이런 경우에는

여기서 푼다고 토큰이 유효한 건 아닙니다

이 도구는 내용을 읽어 줄 뿐 서명은 확인하지 않습니다. 누군가 페이로드를 고쳐 만든 가짜 토큰도 여기서는 똑같이 풀립니다.

  • 실제 검증은 서버가 비밀키로 해야 합니다
  • 화면에 보이는 값만 믿고 권한을 판단하면 안 됩니다

토큰에 비밀을 담으면 안 됩니다

페이로드는 누구나 읽을 수 있습니다. 비밀번호·주민번호·내부 키 같은 걸 넣으면 그대로 노출됩니다. 토큰에는 식별자와 권한 정도만 담는 게 원칙입니다.

만료됐는지 어떻게 보나요

exp 값이 만료 시각입니다. 이 도구가 날짜로 바꿔 보여 주므로 지금보다 이전이면 만료된 토큰입니다. iat는 발급 시각입니다.

이 도구로는 안 되는 것

  • 토큰을 만들지 않습니다. 읽기 전용입니다
  • 서명 검증은 하지 않습니다
  • 내부 JSON을 정렬해 보려면 JSON 포맷터를 함께 쓰세요

용어 설명

JWT

로그인 상태를 담아 서버와 앱이 주고받는 토큰입니다. 서버가 발급하고, 이후 요청마다 이 토큰을 보내 "누구인지"를 증명합니다.

페이로드

토큰 가운데 조각으로, 실제 정보가 담긴 부분입니다. 사용자 ID·권한·만료 시각 등이 들어갑니다. 암호화되어 있지 않다는 점이 중요합니다.

서명

토큰이 중간에 고쳐지지 않았음을 확인하는 값입니다. 서버만 아는 비밀키로 만들기 때문에, 내용을 고치면 서명이 맞지 않아 서버가 거부합니다.

자주 묻는 질문

JWT 토큰을 복호화(디코딩)할 때 서버의 시크릿 키나 비밀번호가 필요한가요?

아니요, 필요하지 않습니다. JWT의 헤더와 페이로드는 암호화(Encryption)된 것이 아니라 단순히 Base64URL 방식으로 인코딩(Encoding)된 텍스트입니다. 따라서 시크릿 키나 프라이빗 키가 없어도 누구나 디코딩 도구를 이용해 내부의 데이터를 평문으로 읽어볼 수 있습니다.

페이로드 내용이 누구나 볼 수 있다면 보안상 위험하지 않나요?

JWT는 데이터의 '기밀성'이 아니라 '무결성'을 보장하기 위한 기술입니다. 내용 자체는 누구나 읽을 수 있으므로 비밀번호나 개인 식별 정보 같은 민감한 데이터를 페이로드에 넣으면 매우 위험합니다. 보안이 필요한 데이터는 토큰에 담지 않고, 서명을 통해 토큰이 중간에 변조되지 않았음을 증명하는 데 목적을 두어야 합니다.

입력 창에 토큰을 넣었는데 '유효하지 않은 JWT 형식입니다'라는 에러가 뜹니다. 원인이 무엇인가요?

정상적인 JWT는 항상 점(.)을 기준으로 3개의 파트로 나뉘어 있어야 하며, Base64URL 문자셋(알파벳, 숫자, 하이픈(-), 언더스코어(_))만 포함해야 합니다. 복사 과정에서 공백이 섞였거나, 일반 Base64 인코딩 결과물인 '+', '/', '=' 문자가 포함되어 있는지 확인해 보세요.

마지막 업데이트: 2026년 8월