업로드 없음, 100% 로컬, 계정 없음

사용법

JWT를 유출 없이 디코딩하는 방법

JSON Web Token에는 실제 데이터가 담겨 있습니다. 발급 대상 사용자, 부여된 스코프, 만료 시점 등입니다. 이를 아무 온라인 디코더에 붙여넣는 것은 그 데이터와, 종종 아직 유효한 세션까지 자신이 통제하지 못하는 서버에 넘기는 일입니다. 아래 디코더는 전적으로 브라우저 안에서 동작하므로 토큰 안에 무엇이 들었는지 읽고, 만료되었는지 확인하고, 시크릿을 알 때 HMAC 서명을 검증할 수 있습니다. 그것도 탭에서 단 한 건의 네트워크 요청도 나가지 않은 채로 말입니다.

단계별 안내

  1. JWT 디코더를 열고 토큰을 입력란에 붙여넣으세요. JWT는 점으로 연결된 세 개의 Base64Url 덩어리, 즉 헤더, 페이로드, 서명입니다. Bearer 접두사를 붙이든 떼든 붙여넣을 수 있으며, 도구는 어느 형식이든 구조를 읽고 형식이 잘못되면 즉시 알려줍니다.
  2. 디코딩된 헤더와 페이로드를 읽으세요. 헤더에는 서명 알고리즘(예: HS256 또는 RS256)과, 있다면 키 ID가 표시됩니다. 페이로드에는 클레임이 나열됩니다. 토큰의 대상(sub), 발급자(iss), 그리고 타임스탬프들입니다. 도구는 숫자형 iat, nbf, exp 필드를 읽기 쉬운 날짜로 바꾸고, 토큰이 아직 유효한지 이미 만료되었는지 표시합니다.
    헤더 알고리즘과, 읽기 쉬운 발급일 및 만료일이 있는 페이로드 클레임을 보여주는 디코딩된 JWT
  3. 토큰이 HS256을 사용하고 공유 시크릿을 가지고 있다면, 시크릿을 검증란에 붙여넣고 Verify를 클릭하세요. 도구는 헤더와 페이로드에 대해 HMAC을 다시 계산해 서명과 비교하므로, 토큰이 진짜인지 변조되었는지 알 수 있습니다. RS256이나 ES256 토큰은 서명에 가지고 있지 않은 개인 키를 쓰므로, 도구는 클레임을 살펴보되 서명을 검증했다고 주장하지 않습니다.
    공유 시크릿이 입력된 HMAC 검증란과 HS256 토큰의 유효한 서명 배지

토큰을 아무 사이트에 절대 붙여넣으면 안 되는 이유

JWT는 암호화되어 있지 않습니다. 헤더와 페이로드는 Base64Url로 인코딩되어 있을 뿐이라, 토큰을 받은 사람은 누구나 그 안의 모든 클레임을 읽을 수 있습니다. 이메일, 사용자 ID, 역할, 내부 플래그 등입니다. 그 토큰이 만료되지 않은 액세스 토큰이라면, 가진 사람은 만료될 때까지 재사용하며 당신 행세를 할 수 있습니다. 살아 있는 토큰을 호스팅형 디코더에 붙여넣으면 그 모든 것이 그 서버의 로그로 전송됩니다. 업로드 없이 자신의 기기에서 토큰을 디코딩하는 것이, 볼 수 있는 사람을 늘리지 않고 내용을 확인하는 유일한 방법입니다. 디코딩하는 동안 네트워크 패널을 열어 트래픽이 전혀 없음을 확인할 수 있습니다.

서명이 알려줄 수 있는 것과 없는 것

서명은 누군가 클레임을 고치고도 무사히 넘어가는 것을 막는 장치입니다. HS256 토큰은 같은 시크릿으로 서명하고 검증하므로, 시크릿을 알면 여기서 토큰이 진짜임을 완전히 확인할 수 있습니다. RS256과 ES256 토큰은 개인 키가 서명하고 짝이 되는 공개 키만 검증합니다. 개인 키는 발급자를 벗어나지 않으므로, 클라이언트 측 도구는 클레임을 읽을 수는 있어도 그 공개 키 없이는 서명을 정직하게 증명할 수 없습니다. 서명이 검증 키 소유자에 의해 확인되기 전까지, 디코딩된 페이로드는 발급자의 주장일 뿐 증거가 아니라고 여기세요. 시크릿을 따로 해시하거나 비교하려면, 이 사이트의 해시 생성기도 로컬에서 동작합니다.

JWT 구조와 각 부분이 드러내는 정보

JWT는 점으로 구분된 세 개의 Base64url 인코딩 세그먼트로 구성됩니다. 헤더, 페이로드, 서명입니다. 헤더는 토큰 유형("JWT")과 알고리즘을 선언합니다. HS256(HMAC-SHA-256, 공유 비밀) 또는 RS256(RSA-SHA-256, 공개/개인 키 쌍)이 가장 일반적입니다. 페이로드는 `sub`(주체, 보통 사용자 ID), `iat`(발급 시점 Unix 타임스탬프), `exp`(만료 Unix 타임스탬프), `aud`(의도된 대상), 역할이나 범위 같은 사용자 정의 애플리케이션 클레임을 포함합니다. Base64url은 암호화가 아닙니다. `+`를 `-`로, `/`를 `_`로 대체하고 패딩을 생략하는 URL 안전한 Base64 변형입니다. 원시 토큰 문자열을 가진 누구든 서명 키 없이 헤더와 페이로드를 디코딩할 수 있습니다. 서명 세그먼트만 검증을 위해 키가 필요합니다. 이것이 실제 운영 토큰을 외부 온라인 디코더에 붙여넣는 것이 보안 위험인 이유입니다. 토큰의 `exp`가 여전히 미래이고 서비스가 입력을 로깅한다면, 해당 토큰이 나타내는 세션이 침해될 수 있습니다.

이 가이드에서 사용하는 도구

자주 묻는 질문

디코딩할 때 내 토큰이 어떤 서버로든 전송되나요?

아니요. 디코더는 토큰을 나누고, 헤더와 페이로드를 Base64Url로 디코딩해 메모리에서 표시합니다. 선택적인 HMAC 검사는 브라우저 내장 Web Crypto API를 사용합니다. 어떤 것도 네트워크로 오가지 않습니다. JWT는 종종 개인 데이터와 아직 살아 있는 세션을 담기에 이는 중요합니다. 디코딩하는 동안 브라우저의 네트워크 패널을 열면 요청이 하나도 나가지 않는 것을 볼 수 있습니다.

이 도구가 RS256이나 ES256 서명을 검증할 수 있나요?

완전히는 아니며, 그런 척도 하지 않습니다. HS256은 서명과 검증 모두에 하나의 공유 시크릿을 쓰므로, 그 시크릿을 붙여넣으면 도구가 브라우저에서 서명을 확인할 수 있습니다. RS256과 ES256은 서명에 개인 키, 검증에 별도의 공개 키를 씁니다. 도구는 클레임과 만료를 읽고 검증하되, 확인할 수 없는 서명을 단정하지는 않습니다. 그런 토큰은 공개 키를 가진 서비스에서 검증하세요.

출처