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은 비대칭입니다: 개인 키가 서명하고 공개 키가 검증하므로, 많은 당사자가 위조할 수 없으면서 토큰을 검증할 수 있습니다.
- 페이로드를 편집해 토큰에 다시 서명할 수 있나요?
- 이 도구는 읽기 전용입니다: 디코딩과 검증은 하지만 토큰을 만들거나 다시 서명하지 않습니다. 그렇게 해서 용도를 좁히고 개인 서명 키를 다루지 않습니다.