JWT 디코더

JWT를 해독하고, 비밀키로 HMAC(HS*) 서명을, 공개키로 RSA/ECDSA(RS/PS/ES) 서명을 브라우저에서 검증하며, 만료 카운트다운을 보여줍니다. 토큰·키는 기기를 벗어나지 않습니다.

🔒 모든 처리는 브라우저에서 실행되며 어떤 것도 업로드되지 않습니다. HMAC(HS256/384/512) 서명은 시크릿으로, RSA/ECDSA/EdDSA(RS/PS/ES, Ed25519) 서명은 붙여넣은 공개 키로 모두 Web Crypto API를 통해 검증됩니다.

토큰을 전송하지 않고 JWT 확인·검증

JSON Web Token을 붙여넣으면 헤더와 페이로드를 읽기 좋은 JSON으로 즉시 해독합니다. 시간 관련 클레임 (exp, iat, nbf)은 사람이 읽는 날짜로 표시하고, 만료까지 실시간 카운트다운을 보여줍니다. 비밀키를 입력하면 HS256/384/512를, SPKI PEM 또는 JWK 공개키를 붙여넣으면 RS256/384/512·PS256/384/512·ES256/384/512를 검증합니다 — Auth0·Okta·Cognito·Google 같은 실제 IdP가 서명에 쓰는 RSA/ECDSA 알고리즘입니다. 전부 브라우저의 Web Crypto API로 처리되어 토큰·비밀키·공개키가 업로드되지 않습니다.

읽는 것과 확인하는 것은 다릅니다

JWT는 점으로 이은 base64url 문자열 셋이고, 가운데가 페이로드입니다. 암호화된 게 아니라 인코딩된 것입니다. 토큰을 가진 사람은 누구나 안의 모든 클레임을 읽을 수 있습니다. JWT에 비공개 정보를 넣으면 안 되는 이유가 이것입니다. 비밀번호도, 카드번호도, URL에 넣지 않을 것은 아무것도 넣지 마세요. 디코딩은 토큰이 무엇을 주장하는지를 알려줍니다. 그 주장을 믿어도 되는지는 서명을 확인해야 알 수 있고, 그러려면 키가 필요합니다. 시크릿이나 공개키를 넣으면 이 페이지가 확인해 줍니다. 없다면 보이는 모든 것을 사실이 아니라 누군가의 주장으로 보세요.

alg: none, 그리고 서명이 맞아도 증명되지 않는 것

헤더가 알고리즘을 지정하는데, 명세상 none도 적법한 값입니다. 서명이 아예 없는 토큰이죠. 자기 설정보다 헤더를 믿은 라이브러리들이 실제 인증 우회 사고의 원인이 됐습니다. 이 도구는 그런 토큰도 디코딩해서 그대로 보여줍니다. 보이는 것이 요점이기 때문입니다. 서명이 맞더라도 증명되는 것은 키를 가진 쪽이 이 페이로드를 발급했다는 사실뿐입니다. 토큰이 그 사람에게서 왔는지, 다른 데서 복사된 것은 아닌지, 아직 유효한지는 말해주지 않습니다. 만료는 exp 클레임에 있고 따로 확인합니다.

자주 묻는 질문

어떤 서명을 검증할 수 있나요?

공유 비밀키로 HMAC(HS256/384/512)을, 공개키로 RSA/ECDSA(RS256/384/512·PS256/384/512·ES256/384/512)를 검증합니다. 공개키는 SPKI PEM(-----BEGIN PUBLIC KEY-----) 또는 JWK 형식으로 붙여넣으세요 — X.509 인증서나 PKCS#1 키는 지원하지 않습니다.

초록색 "검증됨"은 무엇을 보장하나요?

제공한 키와 서명이 일치한다는 것만 보장합니다. 발급자(iss)·대상(aud)·만료 여부는 확인하지 않으므로, 토큰을 신뢰하기 전에 그 클레임들을 별도로 검증하세요.

토큰이 업로드되나요?

아니요. 해독과 검증 모두 브라우저에서만 이뤄집니다. JWT는 흔히 살아있는 인증 수단이라 이 점이 중요합니다.

토큰을 여기 붙여 넣어도 되나요?

디코딩은 브라우저에서 이뤄지고 아무것도 업로드되지 않습니다. 다만 살아 있는 토큰은 자격증명입니다. 아직 유효하다면 어딘가에 붙여 넣은 다른 비밀과 마찬가지로 이후에 만료시키는 편이 좋습니다.

키 없이 페이로드가 읽히는 이유는요?

암호화가 아니라 인코딩이기 때문입니다. base64url은 바이트를 글자로 적는 방식이지 감추는 방식이 아닙니다. JWT는 서명으로 위변조를 막지 읽기를 막지 않습니다.

서명이 맞으면 정상 요청인가요?

서명 키를 가진 쪽이 그 페이로드를 발급했고 이후 변조되지 않았다는 뜻입니다. 지금 그 토큰을 내미는 사람이 누구인지, 만료됐는지는 말해주지 않습니다. 그건 exp와 nbf 클레임으로 확인하세요.