tomai
로그인
무료 · 개발자 도구

JWT 디코더·검증기

JSON Web Token 디코딩 및 HS/RS/ES/PS 서명 검증 —— 전부 브라우저에서

인코딩된 토큰
HEADER
PAYLOAD

JWT 디코더란 무엇인가요?

JWT(JSON Web Token)는 현대 웹 애플리케이션의 인증·인가에 쓰이는 세 부분(헤더, 페이로드, 서명)으로 이루어진 토큰입니다. 페이로드에는 사용자 정보나 만료 시간 같은 데이터가 들어 있지만, 디코딩하기 전에는 알 수 없는 base64 문자 나열로밖에 보이지 않습니다. 이 도구는 헤더와 페이로드를 읽기 좋은 JSON으로 바꾸고, exp·nbf·iat 같은 등록된 클레임을 쉬운 말과 실제 날짜로 설명하며, 토큰이 만료됐는지·유효한지·아직 유효하지 않은지 배지로 알려 줍니다. 서명 검증도 가능합니다. HS256/384/512는 공유 시크릿으로, RS/PS/ES는 PEM 공개 키로 검증하며, 모두 브라우저 내장 Web Crypto로 처리됩니다. 개발자가 인증 흐름을 디버깅할 때 운영 토큰을 타사 사이트에 붙여 넣는 버릇에서 벗어나게 해 주는 도구입니다.

이 도구로 할 수 있는 일

  • 📖 헤더와 페이로드를 정돈된 JSON으로 디코딩
  • 🏷️ 등록된 클레임을 한국어로 알기 쉽게 설명
  • ⏳ exp·nbf·iat를 정확한 날짜와 상대 시간으로 표시
  • ✅ 시크릿 키로 HS256/384/512 서명 검증
  • 🔏 PEM 공개 키로 RS/PS/ES 서명 검증
  • 🚦 만료됨·유효함·아직 유효하지 않음 상태 배지
  • ⚠️ alg가 none인 무방비 토큰에 경고 표시

언제 유용할까

  • 로그인 흐름에서 401 오류의 원인을 찾을 때
  • 토큰이 갑자기 작동하지 않는 이유를 확인할 때
  • 제3자 IdP가 발급한 토큰을 신뢰하기 전에 검증할 때
  • 리프레시 토큰 안에 어떤 클레임이 있는지 확인할 때

개인정보: 토큰과 키는 모두 브라우저 안에서 처리되며 업로드되지 않으므로, 운영 환경의 자격 증명을 붙여 넣어도 안심할 수 있습니다.

세 개의 세그먼트가 실제로 무엇인지

JWT는 점(.)으로 구분된 세 개의 base64url 인코딩 세그먼트로 구성됩니다:

  • 헤더는 알고리즘을 지정하고, 페이로드는 클레임을 담으며, 서명은 시크릿 또는 키를 사용해 헤더와 페이로드를 결합합니다.
  • 헤더나 페이로드의 내용은 암호화되지 않으므로, 토큰을 소지한 누구나 모든 클레임을 읽을 수 있습니다. 이는 JWT가 안전한 컨테이너가 아니라 단순히 서명된 컨테이너라는 설계 의도에 따른 것입니다.
  • 검증은 서명 키를 필요로 하며, 반드시 귀하의 서버에서 수행되어야 합니다. 이 페이지는 로컬에서 디코딩만 수행하므로, 토큰을 원격지에 복사하거나 전송하지 않고도 클레임을 직접 확인할 수 있습니다.

디코딩은 검증이 아닙니다

클레임이 실제 날짜로

헤더와 페이로드는 읽기 쉬운 JSON으로 표시되고, exp·nbf·iat 같은 등록 클레임은 실제 날짜로 바뀌며 만료·활성·아직 유효하지 않음의 판정이 명확하게 나옵니다.

🔒

HS·RS·PS·ES 서명 검증

HS256/384/512는 일반 텍스트 또는 base64 형식의 공유 비밀키로, RS·PS·ES 토큰은 PEM 공개 키로 검증할 수 있으며, 모두 페이지 안에서 Web Crypto로 처리됩니다.

🎯

형식 오류 토큰 설명

점 누락, 잘못된 헤더, 읽을 수 없는 페이로드 같은 구조 문제를 정확히 보고하며, none 알고리즘을 주장하는 토큰은 신뢰하는 대신 경고로 표시합니다.

자주 묻는 질문

제 토큰이 서버로 전송되나요?

아니요. 디코딩과 서명 검증은 모두 브라우저의 Web Crypto API로 처리됩니다. 토큰, 비밀 키, 공개 키가 기기를 벗어나지 않으므로 운영 토큰도 안전하게 확인할 수 있습니다.

어떤 서명 알고리즘을 검증할 수 있나요?

공유 비밀 키를 사용하는 HS256/384/512(UTF-8 또는 base64url)와, 비대칭 계열 RS256/384/512, PS256/384/512, ES256/384/512(PEM 공개 키 붙여넣기)를 지원합니다. 비대칭 토큰에는 공개 키만 필요하며 개인 키는 필요하지 않습니다.

JWT는 암호화되지 않는데 무슨 뜻인가요?

표준 JWT는 base64url로 인코딩되고 서명될 뿐 암호화되지 않으므로 누구나 Payload를 읽을 수 있습니다. JWT에 비밀 정보를 넣지 마세요. 서명은 키가 없는 사람이 토큰을 변조하지 않았음만 증명합니다.

서명이 유효하지 않다고 나옵니다 — 토큰이 위조된 것인가요?

보통 다음 세 가지 지루한 원인 중 하나입니다: 토큰이 다른 환경의 시크릿으로 서명되었음; 발급자가 키를 교체했으나 사용 중인 키는 오래됨; 또는 헤더의 알고리즘 값이 백엔드 검증기에서 기대하는 알고리즘과 일치하지 않음(유명한 <code>alg=none</code> 공격). 먼저 여기서 헤더를 디코딩한 후, 백엔드에서 실제로 사용하는 키와 비교해 보세요.

관련 도구

관련 도구