JWT 디코더

JWT의 헤더·페이로드·서명을 파싱하여 표시합니다. 만료 시각 하이라이트 포함. 무료, 브라우저에서 처리.

  • 브라우저에서 처리
  • 데이터가 브라우저 밖으로 나가지 않습니다
  • 무료 · 회원가입 불필요
「디코드」는 즉시 실행합니다. 도구 안에 포커스가 있을 때 Ctrl/⌘+Enter도 같습니다. Base64URL 3개 파트 형식에 맞는 입력은 300밀리초 후 자동으로 디코딩합니다. 다른 입력의 오류는 「디코드」로 확인합니다.
「예시 불러오기」는 입력을 바꾸고 John Doe, iat 1516239022, exp 1893456000이 포함된 HS256 토큰을 즉시 디코딩합니다.
「지우기」 또는 도구 안에 포커스가 있을 때 Ctrl/⌘+L을 누르면 토큰, 결과, 상태를 지우고 대기 중인 자동 디코딩을 취소합니다.
점으로 구분된 Base64URL 3개 파트를 붙여넣습니다. Header와 Payload는 UTF-8로 읽으며 패딩 생략을 허용합니다. 서명이 비어 있는 토큰도 볼 수 있습니다. 토큰을 저장하거나 업로드하지 않습니다.

디코딩은 서명을 검증하지 않습니다. “valid”는 이 기기의 시계를 기준으로 만료 시각이 지나지 않았다는 뜻입니다.

디코딩 결과 Header와 Payload는 강조된 JSON으로 표시합니다. 각 「복사」 버튼은 날짜 주석을 제외하고 공백 두 칸으로 들여쓴 JSON을 복사합니다. Signature는 원본 Base64URL 문자열이며 서명을 검증하지 않습니다.
시간 클레임 Payload의 숫자형 exp, iat, nbf에 UTC 날짜를 붙입니다. 이름이 같은 중첩 필드에도 적용됩니다. 단위는 초입니다. exp만 기기 시계에 따라 valid 또는 EXPIRED를 표시하며, 서명 검증을 뜻하지 않습니다.

디코딩하면 Header, Payload와 원본 Signature가 여기에 표시됩니다.

자세한 가이드 읽기 JWT 디코더 완벽 가이드: JSON Web Token 구조와 보안
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.

예시: 카카오 로그인 ID 토큰 확인하기

카카오 로그인에서 OpenID Connect를 켜면 액세스 토큰과 함께 ID 토큰을 받을 수 있습니다. 카카오 로그인 REST API 문서에 따르면 ID 토큰 페이로드에는 iss(https://kauth.kakao.com으로 고정), aud(앱 키), sub(회원번호), iat, exp, auth_time과, 동의한 경우 nickname 등이 들어갑니다.

아래 토큰은 같은 문서의 「ID 토큰 정보 조회」 응답 예시에 있는 회원번호와 시각을 쓰고, 닉네임 「홍길동」과 가짜 앱 키를 넣어 만든 것입니다. 실제 카카오 ID 토큰은 헤더의 alg가 RS256으로 고정이고 카카오의 키로 서명되지만, 이 예시는 누구나 다시 만들 수 있도록 데모용 비밀 키 zerotool-demo-secret-ko로 HS256 서명했습니다. 디코딩 결과는 서명 방식과 관계없이 같은 방법으로 읽힙니다.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2thdXRoLmtha2FvLmNvbSIsImF1ZCI6ImRlbW8tYXBwLWtleSIsInN1YiI6IjE2Njk1OSIsImlhdCI6MTY0NzE4MzI1MCwiZXhwIjoxNjQ3MTkwNDUwLCJhdXRoX3RpbWUiOjE2NDcxODMyNTAsIm5pY2tuYW1lIjoi7ZmN6ri464-ZIn0.Igz_lil9WWSiWo7SbVKQcHI96Osg4EKSVfNAMT7BxhU

Payload 영역에는 다음 JSON이 표시됩니다. 「복사」를 눌러도 날짜 주석 없이 같은 내용이 복사됩니다.

{
  "iss": "https://kauth.kakao.com",
  "aud": "demo-app-key",
  "sub": "166959",
  "iat": 1647183250,
  "exp": 1647190450,
  "auth_time": 1647183250,
  "nickname": "홍길동"
}

iat 옆에는 Sun, 13 Mar 2022 14:54:10 GMT, exp 옆에는 Sun, 13 Mar 2022 16:54:10 GMT — EXPIRED가 표시됩니다. 한국 시간으로는 2022년 3월 13일 23:54:10에 발급되어 3월 14일 01:54:10에 만료된 토큰이고, 두 값의 차이는 7200초, 즉 2시간입니다. auth_time은 날짜 주석 대상이 아니라서 숫자만 보입니다. 날짜가 붙는 키는 exp, iat, nbf 세 개뿐입니다.

카카오 문서는 ID 토큰 정보 조회 API(https://kauth.kakao.com/oauth/tokeninfo)를 디버깅용 참고 정보를 돌려주는 API로 설명하고, 서비스는 ID 토큰의 유효성을 먼저 검증한 뒤 토큰의 사용자 정보를 활용하라고 안내합니다. 서명 검증에 쓰는 공개키는 공개키 목록(https://kauth.kakao.com/.well-known/jwks.json)에서 받습니다. 이 도구의 디코딩 결과는 그 검증을 대신하지 않습니다.

붙여넣을 때 자주 생기는 오류

토큰 요청 API 응답은 "id_token": "eyJ..." 형태의 JSON입니다. 값을 복사하면서 양쪽 큰따옴표까지 함께 붙여넣으면 상태 표시줄에 Base64URL 디코드에 실패했습니다.가 나타납니다. 따옴표를 빼고 eyJ로 시작하는 부분만 붙여넣으세요. 앞에 Bearer 가 붙어 있을 때도 같은 오류가 납니다.

긴 토큰이 화면에서 줄바꿈되어 마지막 서명 부분을 빠뜨리기도 합니다. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxNjY5NTkifQ처럼 두 부분만 넣으면 유효하지 않은 JWT: 3개 파트가 필요합니다. 실제: 2.가 표시됩니다. 위 두 경우는 300밀리초 후 자동 디코딩도 동작하지 않으므로, 오류 내용을 보려면 「디코드」를 눌러야 합니다.

제한

  • 토큰 중간의 줄바꿈과 그 앞뒤의 공백·탭은 무시합니다. 로그나 메일에서 여러 줄로 나뉜 토큰도 그대로 디코딩되며 상태 표시줄에 디코딩 완료.가 나타납니다. Header나 Payload 중간에 있는 그 밖의 공백·탭은 디코드 실패로 처리합니다.
  • 날짜를 표시하는 것은 값이 숫자(초)인 exp, iat, nbf뿐이며, 중첩된 객체의 같은 이름 필드에도 붙습니다. 원래 숫자는 그대로 보여 주고 날짜 주석은 초 단위까지만 표시합니다. 밀리초 값을 넣으면 수만 년 뒤의 날짜가 나옵니다.
  • 「valid」, 「EXPIRED」, 서명 영역의 「not verified」, 「(unable to parse)」는 모든 언어 페이지에서 영어로 표시됩니다.
  • 디코딩은 되지만 JSON이 아닌 부분은 「(unable to parse)」로 표시됩니다.
  • 암호화된 JWE는 다섯 부분으로 이루어져 키 없이는 읽을 수 없습니다(RFC 7516 §3).
  • 서명은 검증하지 않습니다. 서버에서는 발급자의 키로 서명을 검증한 뒤 exp, nbf, iss, aud를 확인해야 합니다(RFC 8725 §3).
  • 토큰은 어디에도 저장하지 않습니다. JWT는 로그인 자격 증명인 경우가 많아, 이 페이지는 분석·광고 스크립트를 불러오지 않습니다.

JWT에 대하여

JWT는 웹 애플리케이션의 인증·인가에 널리 쓰입니다. 사용자가 로그인하면 서버가 JWT를 발급하고, 클라이언트는 이후 요청에서 JWT를 Authorization 헤더에 넣어 보냅니다. 디버깅 중에 토큰 안의 사용자 ID, 역할, 만료 시각을 확인하고 싶을 때 이 도구를 씁니다. 원하는 클레임으로 테스트 토큰을 만들려면 JWT 생성기 / 서명 도구를 사용하세요.

FAQ

붙여넣은 JWT가 서버로 전송되거나 저장되나요?

아니요. 디코딩은 브라우저의 JavaScript로 처리하며, 토큰을 서버로 보내지도 않고 브라우저 저장소에 저장하지도 않습니다. 이 페이지는 Google Analytics와 AdSense를 불러오지 않습니다.

서명을 검증할 수 있나요?

할 수 없습니다. 서명을 검증하려면 발급자의 비밀 키나 공개 키가 필요합니다. 이 도구는 Header와 Payload를 디코딩해 보여 주고 Signature는 원본 문자열 그대로 표시하므로, 클레임 내용을 확인하는 용도로 사용하세요.

JWT의 세 부분은 무엇인가요?

JWT는 Base64URL로 인코딩한 세 부분을 점(.)으로 이은 문자열입니다. Header(서명 알고리즘과 토큰 종류), Payload(클레임), Signature(토큰이 바뀌지 않았는지 확인하는 값)로 이루어집니다.

Payload의 exp는 무엇인가요?

exp는 만료 시각 클레임이며 값은 초 단위 유닉스 타임스탬프입니다. 이 도구는 원래 숫자 옆에 읽을 수 있는 날짜를 보여 주고, 기기 시계와 비교해 valid 또는 EXPIRED를 표시합니다.

표시되는 시각이 한국 시간보다 9시간 이른 이유는 무엇인가요?

날짜 주석은 기기의 시간대와 관계없이 항상 UTC(GMT로 표기)로 표시합니다. 한국 표준시는 UTC+9이므로 9시간을 더해 읽으면 됩니다. 예를 들어 Sun, 13 Mar 2022 16:54:10 GMT는 한국 시간 2022년 3월 14일 01:54:10입니다. valid·EXPIRED 판정은 초 단위 숫자끼리 비교하므로 시간대의 영향을 받지 않습니다.