JWT 디코더 / 검증기

JWT의 헤더와 페이로드를 디코딩하고, 서명을 검증하고, 만료를 확인할 수 있습니다.

토큰

JSON Web Token이란 무엇인가

JSON Web Token(JWT)은 일련의 클레임 — "이는 사용자 42다"나 "이 토큰은 정오에 만료된다" 같은 주장 — 을 검증할 수 있는 형태로 간결하게 자체 완결적으로 나르는 방법입니다. JWT는 현대 인증 곳곳에 있습니다: 로그인하면 서버가 흔히 서명된 JWT를 브라우저에 건네고, 이후 모든 요청이 그것을 포함해 서버가 아무것도 조회하지 않고도 상대가 누구인지 신뢰할 수 있습니다. 토큰이 자신의 클레임과 서명을 나르므로 "무상태"라 불립니다.

JWT는 점으로 이어진 세 개의 Base64URL 인코딩 부분입니다: header.payload.signature. 이 도구는 그 부분들을 나누어 디코딩하고, 클레임을 읽기 좋게 보여 주며, 서명 키를 입력하면 서명이 진짜인지 검증합니다.

세 부분

  • 헤더: 토큰이 어떻게 서명됐는지 기술합니다. 가장 중요한 것은 알고리즘("alg", 예: HS256이나 RS256)과 토큰 종류입니다.
  • 페이로드: 클레임 그 자체 — sub(주체/사용자), exp(만료), iat(발급 시각) 같은 필드와 발급자가 더한 임의의 사용자 정의 데이터를 담은 JSON 객체입니다.
  • 서명: 시크릿이나 개인 키로 헤더와 페이로드에 걸쳐 계산된 암호학적 값입니다. JWT를 신뢰할 수 있게 만드는 것이 이것입니다: 페이로드의 한 글자만 바꿔도 서명이 더는 맞지 않습니다.

중요한 것은 헤더와 페이로드가 인코딩만 됐을 뿐 암호화되지 않았다는 점입니다. 토큰을 가진 사람은 누구나 그것을 읽을 수 있습니다. 서명은 내용을 숨기는 것이 아니라 변조되지 않았음을 증명합니다. 비밀번호나 시크릿을 JWT 페이로드에 넣지 마세요.

서명 검증

JWT를 디코딩하면 무엇을 주장하는지 알 수 있고, 검증하면 그 주장을 믿어도 될지 알 수 있습니다. 검증은 키를 써서 헤더와 페이로드에서 서명을 다시 계산해 맞는지 확인합니다. 알고리즘에는 두 계열이 있고, 저마다 다른 종류의 키를 씁니다:

  • HMAC(HS256, HS384, HS512): 대칭 방식입니다. 같은 공유 시크릿이 서명과 검증을 모두 합니다. 검증하려면 그 시크릿을 입력하세요.
  • RSA와 ECDSA(RS256, PS256, ES256 등): 비대칭 방식입니다. 개인 키가 서명하고 공개 키가 검증합니다. 검증하려면 PEM 형식 공개 키를 입력하세요 — 토큰을 확인하는 데는 개인 키가 전혀 필요 없습니다.

이 도구는 헤더에서 알고리즘을 자동으로 판별하고 Web Crypto API를 써서 전적으로 브라우저 안에서 검증하므로, 토큰도 키도 업로드되지 않습니다.

표준 클레임 읽기

몇몇 클레임 이름은 표준화되어 있습니다("등록된 클레임"이라 부릅니다). 이 도구는 그것들에 레이블을 달고, 시간 기반 클레임을 원시 Unix 타임스탬프에서 기기의 현지 시각으로 바꾸며, 쉬운 말로 된 상태를 붙여 토큰이 유효한지, 만료됐는지, 아직 쓸 수 없는지 한눈에 보이게 합니다:

  • exp — 만료 시각: 이 순간 이후 토큰은 거부되어야 합니다.
  • nbf — 유효 시작: 이 순간까지 토큰은 무효입니다.
  • iat — 발급 시각: 토큰이 만들어진 때입니다.
  • iss — 발급자: 토큰을 만든 주체입니다.
  • sub — 주체: 토큰이 누구/무엇에 관한 것인지(흔히 사용자 ID)입니다.
  • aud — 대상: 토큰이 누구를 향하는지입니다.
  • jti — 토큰의 고유 식별자입니다.

자주 묻는 질문

제 토큰이나 키가 어딘가로 전송되나요?
아니요. 디코딩과 서명 검증이 Web Crypto API를 써서 전적으로 브라우저 안에서 돕니다. 토큰, 시크릿, 공개 키가 기기 밖으로 나가지 않아 운영 토큰도 안전하게 살필 수 있습니다.
어떤 서명 알고리즘을 검증할 수 있나요?
공유 시크릿을 쓰는 HMAC(HS256, HS384, HS512)과 PEM 형식 공개 키를 쓰는 RSA(RS·PS 변형) 및 ECDSA(ES256, ES384)입니다. 알고리즘은 토큰 헤더에서 자동으로 판별됩니다.
JWT는 암호화되어 있나요?
아니요. 표준 서명된 JWT는 인코딩만 됐을 뿐 암호화되지 않았습니다 — 누구나 헤더와 페이로드를 읽을 수 있습니다. 서명은 토큰이 바뀌지 않았음을 증명하지만 내용을 숨기지는 않으므로, 페이로드에 시크릿을 저장하지 마세요.
RS256 토큰 검증에 개인 키가 필요한가요?
아니요. 비대칭 알고리즘은 공개 키로 검증합니다. 개인 키는 토큰을 만들(서명할) 때만 필요하고 확인할 때는 결코 필요하지 않습니다.
제 토큰이 만료로 표시되는 이유는 무엇인가요?
exp 클레임이 기기 시계 기준으로 과거이기 때문입니다. 이 도구는 exp, nbf, iat를 현지 시각으로 바꾸고 상태를 보여 주어 토큰의 유효 기간을 한눈에 확인할 수 있게 합니다.
HS256과 RS256의 차이는 무엇인가요?
HS256은 대칭입니다: 하나의 공유 시크릿이 서명과 검증을 모두 하며, 같은 당사자가 둘 다 할 때 가장 간단합니다. RS256은 비대칭입니다: 개인 키가 서명하고 공개 키가 검증하므로, 많은 당사자가 위조할 수 없으면서 토큰을 검증할 수 있습니다.
페이로드를 편집해 토큰에 다시 서명할 수 있나요?
이 도구는 읽기 전용입니다: 디코딩과 검증은 하지만 토큰을 만들거나 다시 서명하지 않습니다. 그렇게 해서 용도를 좁히고 개인 서명 키를 다루지 않습니다.