JWT 디코더·생성기

JWT의 헤더·페이로드를 디코딩하고 HS256/384/512 또는 RS/PS/ES256/384/512 서명을 키로 검증하거나, 새 토큰에 서명합니다 — 토큰과 키는 기기를 벗어나지 않습니다.

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 클레임에 있고 따로 확인합니다.

같은 페이지에서 토큰 만들기

만들기 쪽은 JSON 페이로드로 새 토큰에 서명합니다. HS256·HS384·HS512는 시크릿으로, RS256/384/512·ES256/384/512는 RSA나 타원곡선 개인 키로 서명하며, 개인 키는 PEM이나 JWK로 붙여 넣거나 여기서 테스트용 키 쌍을 만들 수 있습니다. iat·nbf·exp를 넣고 sub· iss·aud·jti를 채울 수도 있습니다. 이 토큰 읽고 검증하기를 누르면 결과가 이쪽으로 넘어오고, RS·ES 토큰이면 검증할 공개 키도 함께 옵니다. 시크릿과 개인 키는 넘어오지 않으며 어느 것도 페이지 주소에 들어가지 않습니다. 여기서 만든 토큰은 테스트용입니다. 실제 토큰은 키를 지키는 서버에서 발급하세요.

자주 묻는 질문

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

공유 시크릿으로 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)·만료 여부는 확인하지 않으므로, 토큰을 신뢰하기 전에 그 클레임들을 별도로 검증하세요.

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

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

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

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

새 토큰은 어떤 알고리즘으로 서명할 수 있나요?

시크릿으로 서명하는 HMAC 기반의 HS256, HS384, HS512와, 개인 키로 서명하는 RS256, RS384, RS512, ES256, ES384, ES512를 지원합니다. 선택한 알고리즘은 토큰 헤더의 alg 필드에 기록되며 헤더와 페이로드 문자열에 서명하는 데 사용됩니다.

RSA나 타원곡선 키로 서명할 수 있나요?

네. RS나 ES 알고리즘을 고르고 개인키를 PEM이나 JWK로 붙여 넣거나 테스트용 키 쌍을 만들면 됩니다. 짝이 되는 공개키가 함께 나와 토큰을 검증할 사람에게 바로 복사해 줄 수 있습니다. 암호가 걸린 키나 공개키는 무엇이 문제인지 말하고 거부합니다.

sub·iss·aud·jti를 넣거나 iat·nbf를 현재가 아닌 시각으로 정할 수 있나요?

네. "등록 클레임" 아래에 주체 (sub), 발급자 (iss), 대상 (aud), 토큰 식별자 (jti) 칸이 있습니다. 채운 칸은 페이로드의 같은 클레임을 덮어쓰고 비워 둔 칸은 페이로드를 그대로 두며, 대상을 쉼표로 여러 개 적으면 배열이 됩니다. "발급 시각 (iat)"이나 "유효 시작 (nbf)"을 켜면 옆의 날짜·시각 칸을 쓸 수 있는데, 비워 두면 현재 시각(초 단위)이 들어가고 시각을 고르면 로컬 시간 기준으로 그 시각이 들어갑니다. 만료 시간은 여전히 지금부터 셉니다.