Security · 2026년 9월 14일

JWT 토큰 온라인 디코딩 — 업로드 없이 헤더, 페이로드 및 클레임 검사

JWT 토큰을 붙여넣고 브라우저에서 즉시 디코딩하세요. 헤더, 페이로드, 만료 시간 및 모든 클레임을 확인할 수 있습니다 — 서버 업로드 없음, 위험 없음.

JWT는 웹 애플리케이션에서 가장 흔한 인증 토큰 형식입니다. 로그인할 때마다 API는 사용자의 신원, 권한 및 종종 개인 정보를 담은 JSON Web Token을 발급합니다. 문제가 발생할 때 — 만료된 세션, 거부된 요청, 팀원이 “이 토큰에 뭐가 들어있어?“라고 물을 때 — 첫 번째 본능은 이를 디코딩하는 것입니다.

대부분의 온라인 JWT 디코더는 작동합니다. 문제는 토큰을 그들에게 신뢰할 수 있느냐입니다.

JWT에 실제로 들어있는 것

JWT는 점으로 구분된 세 개의 base64url 인코딩된 문자열입니다:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJBbGljZSIsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

첫 두 부분을 디코딩하면 JSON을 얻습니다:

// Header
{
  "alg": "HS256",
  "typ": "JWT"
}
// Payload
{
  "sub": "12345",
  "name": "Alice",
  "iat": 1516239022
}

서명은 토큰이 비밀을 가진 사람에 의해 발급되었음을 증명하는 암호화 해시입니다. 누구나 페이로드를 디코딩할 수 있습니다 — 그것이 보안 경계가 아닙니다. 보안 경계는 서명을 검증할 수 있는지 여부입니다.

디코딩 대 검증

이 구별이 중요합니다:

  • 디코딩 = JSON을 base64 디코딩하여 읽을 수 있게 합니다. 비밀 불필요. 누구나 할 수 있습니다.
  • 검증 = 알려진 비밀로 서명을 확인하여 토큰이 변조되지 않았음을 확인합니다. 비밀이 필요합니다.

대부분의 온라인 디코더는 디코딩만 합니다. 헤더와 페이로드를 표시하지만 비밀을 요청하지 않습니다 — 검증하는 것이 아니라 표시만 하기 때문입니다.

디버깅의 경우(이 토큰에 어떤 클레임이 있는지, 언제 만료되는지), 디코딩만으로 충분합니다. 인증의 경우 검증이 필요합니다 — 그리고 이를 제어하는 인프라에서 이루어져야 합니다.

확인해야 하는 표준 JWT 클레임

JWT를 디코딩할 때 이러한 등록된 클레임을 확인하십시오:

클레임 의미 확인할 사항
exp 만료 시간 (Unix 타임스탬프) 미래인지 확인
nbf 시작 전 (Unix 타임스탬프) 과거인지 확인
iat 발급 시점 (Unix 타임스탬프) 토큰이 얼마나 오래되었는지
iss 발급자 인증 서버와 일치하는지
aud 대상 API와 일치하는지
sub 주제 (사용자 ID) 예상 사용자인지

“유효한” 토큰이 실패하는 가장 흔한 이유: 만료되었습니다. exp를 먼저 확인하십시오.

브라우저에서 JWT를 디코딩하는 방법

이를 위해 제3자 도구가 필요하지 않습니다. JWT는 세 개의 base64url 문자열일 뿐입니다. 하지만 디코딩 명령을 외우고 싶지 않다면 브라우저 기반 디코더가 토큰을 업로드하지 않고 동일한 작업을 수행합니다:

  1. 디코더에 JWT를 붙여넣습니다
  2. 디코딩된 헤더, 페이로드 및 서명을 봅니다
  3. exp 클레임을 확인하여 토큰이 만료되었는지 확인합니다
  4. 헤더의 알고리즘이 예상과 일치하는지 확인합니다

DevSpeedTools의 JWT 디코더는 완전히 브라우저에서 실행됩니다. 네트워크 요청 없음, 업로드 없음, 로그 없음. 개발자 도구 → 네트워크를 열고, 토큰을 붙여넣고, 기계를 떠나는 것이 없는지 확인하십시오.

검증이 필요할 때 (디코딩만으로는 불충분한)

인증 문제를 디버깅하고 토큰이 유효한지 — 단순히 내용이 아니라 — 알아야 한다면 서명을 검증해야 합니다. 이는 인증 서버가 사용하는 동일한 비밀 또는 공개 키로 이루어져야 합니다.

웹사이트에 비밀을 붙여넣지 않는 옵션:

  • Node.js: jsonwebtoken.verify(token, process.env.JWT_SECRET)
  • Python: jwt.decode(token, key, algorithms=['HS256'])
  • Go: token, err := jwt.Parse(tokenString, keyFunc)
  • CLI: jwt-cli (Rust) 또는 pyjwt의 원라이너

프로덕션 비밀을 온라인 도구에 붙여넣지 마십시오. 토큰은 비밀이 아닙니다. 내용은 종종 그렇습니다.

핵심 요약

  • 빠른 검사를 위해 브라우저 기반 디코더를 사용하십시오. 업로드 없음, 유출 없음.
  • 검증을 위해 CLI 또는 자체 코드를 사용하십시오. 웹사이트에 비밀을 절대 붙여넣지 마십시오.
  • exp를 먼저 확인하십시오 — 만료된 토큰이 대부분의 “토큰이 작동하지 않아요” 문제의 원인입니다.