JWT 디코더

JWT는 점으로 구분된 헤더, 페이로드, 서명 세 부분으로 이뤄집니다. 이 도구는 헤더와 페이로드를 디코딩하고 exp·iat·nbf를 UTC와 현지 시각으로 보여 주며, 서명은 검증하지 않습니다.

이 도구는 디코딩만 하고 서명은 검증하지 않습니다. 여기서 디코딩된다고 진짜 토큰이라는 뜻은 아닙니다.

토큰을 붙여 넣으면 디코딩합니다

문제가 해결됐나요?
Google 선호 출처로 추가

사용 방법

  1. 토큰을 입력 칸에 붙여 넣습니다. 앞에 붙은 Bearer, 따옴표, 줄바꿈은 무시합니다.
  2. 헤더와 페이로드를 정리된 JSON으로 읽습니다. 복사를 누르면 각각 복사됩니다.
  3. 배지와 시간 클레임을 확인합니다. exp, iat, nbf는 UTC와 현지 시간으로 나오고, 지금부터 얼마나 지났는지 또는 남았는지도 함께 보입니다.
  4. 가진 토큰이 없다면 예시 불러오기를 눌러 가짜 토큰으로 써 보세요.

계산 방법

JWT는 점으로 나뉜 세 부분, 헤더·페이로드·서명으로 이뤄집니다. 헤더와 페이로드는 JSON을 base64url로 인코딩한 것으로, base64에서 +와 / 대신 -와 _를 쓰고 = 패딩을 뺀 형식입니다. 도구는 이 인코딩을 되돌리고 바이트를 UTF-8로 읽어 들여쓰기한 JSON으로 보여 줍니다.

exp, iat, nbf는 1970년 1월 1일 UTC부터 센 초입니다. exp는 만료 시각, iat는 발급 시각, nbf는 유효해지는 가장 이른 시각입니다. 배지는 표준 규칙을 따릅니다. 현재 시각이 exp와 같거나 지났으면 만료, nbf보다 이르면 아직 유효하지 않음으로 판정합니다. 현재 시각은 기기 시계를 씁니다.

서명은 토큰에 든 문자열을 그대로 보여 줍니다. 이 도구는 서명을 검증하지 않습니다. 디코딩은 토큰만 있으면 되지만 서명 검증에는 비밀 키나 공개 키가 필요하고, 그 작업은 서버에서만 해야 합니다.

자주 쓰는 클레임

클레임뜻
iss발급자: 토큰을 만든 주체
sub주제: 토큰이 가리키는 대상, 보통 사용자 ID
aud대상: 토큰을 받을 쪽
exp만료 시각, 1970년 UTC부터 센 초
nbfNot Before: 이 시각 전에는 유효하지 않음
iat발급 시각: 토큰을 만든 때
jti토큰 ID: 이 토큰의 고유 식별자

자주 묻는 질문

서명도 검증하나요?

아니요. 헤더와 페이로드를 디코딩만 합니다. JWT는 누구나 디코딩할 수 있고 아무 내용으로나 만들 수도 있으니, 디코딩이 잘 된다고 믿으면 안 됩니다. 서명은 서버에서 올바른 키로 검증하세요.

토큰이 어딘가로 전송되나요?

아니요. 디코딩은 브라우저에서 하고 아무것도 업로드하지 않습니다. 그래도 실제 토큰은 비밀번호처럼 다루세요. 믿을 수 없는 도구에 운영 환경의 살아 있는 토큰을 붙여 넣지 마세요.

방금까지 되던 토큰이 만료라고 나와요

배지는 exp를 이 기기의 시계와 비교합니다. 기기 시계가 틀렸거나 서버가 시간 차이를 조금 허용하면 잠깐 동안 판정이 엇갈릴 수 있습니다.

alg가 none이면 무슨 뜻인가요?

서명이 없는 보호되지 않은 토큰이라는 뜻입니다. 서명 없는 토큰을 일부러 받는 드문 경우가 아니면 서버는 거부해야 합니다. 도구는 none을 발견하면 경고를 띄웁니다.

페이로드는 암호화되어 있나요?

아니요. 일반적인 서명 JWT는 인코딩만 되어 있어서 토큰을 가진 사람은 누구나 페이로드를 읽을 수 있습니다. 비밀 정보는 넣지 마세요. 암호화된 토큰(JWE)은 다섯 부분으로 되어 있고 이 도구로는 읽을 수 없습니다.