JWT 디코더·검증기 소개
JSON Web Token(JWT)은 점으로 구분된 base64url 세 부분으로 이루어진 짧은 문자열입니다. 서명 알고리즘을 적은 헤더, 사용자 ID나 만료 시각 같은 클레임을 담은 페이로드, 그리고 서명입니다. 앞의 두 부분은 암호화가 아니라 인코딩되어 있을 뿐이라 누구나 디코딩할 수 있지만, 토큰이 정말 키를 가진 쪽에서 발급되었는지는 서명으로만 알 수 있습니다.
이 도구는 헤더와 페이로드를 디코딩하고, exp, nbf, iat 타임스탬프를 읽기 쉬운 날짜로 바꾸며, 토큰이 만료되었는지 알려 줍니다. 서명에 쓴 비밀 키나 발급자의 공개 키를 붙여넣으면 서명도 검증합니다. 토큰과 키는 브라우저 안에서 처리되며 서버로 전송되지 않습니다. 액세스 토큰으로 실제 계정에 접근할 수 있으므로 이 점이 중요합니다.
사용 방법
- "토큰" 상자에 토큰을 붙여넣으세요. 맨 앞의 "Bearer "와 줄바꿈은 자동으로 지워집니다.
- 디코딩된 "헤더"와 "페이로드"를 읽고, "클레임" 표에서 발급자, 주체, 대상, 유효 기간을 확인하세요.
- 서명을 확인하려면 "서명 검증"으로 가세요. HS256, HS384, HS512라면 공유 비밀 키를 입력하고, 비밀 키가 base64로 인코딩되어 있으면 "비밀 키가 base64로 인코딩됨"을 체크하세요.
- RS, PS, ES, EdDSA 토큰이라면 공개 키를 PEM 블록, X.509 인증서, JWK, 또는 JWKS 전체로 붙여넣으세요.
- "검증"을 클릭하세요. 결과에서 서명이 올바른지 확인할 수 있습니다.
기능
- 읽기 쉬운 클레임: 만료 시각, 유효 시작 시각, 발급 시각을 UTC, 내 시간대, 지금 기준 상대 시간으로 보여 주며, 현재 상태도 실시간으로 표시합니다.
- 서명 검증: 브라우저의 Web Crypto API로 HS256/384/512, RS256/384/512, PS256/384/512, ES256/384/512, EdDSA(Ed25519)를 지원합니다.
- 다양한 키 입력: SPKI PEM 공개 키, X.509 인증서, 단일 JWK, JWK 세트를 받으며, JWK 세트에서는 kid로 키를 고릅니다.
- 명확한 오류 메시지: 토큰의 부분 개수가 맞지 않는지, base64url이나 JSON이 올바르지 않은지, 암호화된 JWE인지 알려 줍니다.
- 개인정보를 지키는 설계: 아무것도 업로드하거나 저장하지 않습니다. 키는 이 브라우저 탭 안에만 있으며 탭을 닫으면 사라집니다.
사용 예
API가 401을 돌려주는 이유 찾기
실패한 요청의 액세스 토큰을 붙여넣으세요. "클레임" 표에 "만료됨"과 내 시간대 기준 만료 시각이 표시되면, 클라이언트가 토큰을 갱신하지 않았다는 것을 알 수 있습니다.
ID 공급자가 발급한 ID 토큰 확인하기
공급자의 JWKS 문서(jwks_uri의 내용)를 복사해 키로 붙여넣으세요. 도구가 kid가 맞는 키를 골라 RS256 서명을 검증합니다.
HS256 연동 디버깅하기
토큰과 공유 비밀 키를 붙여넣으세요. 서명이 일치하지 않으면 한쪽은 비밀 키를 base64로 인코딩해 쓰고 다른 쪽은 일반 텍스트로 쓰고 있지 않은지 확인하세요.
제한 사항과 참고
- 암호화된 토큰(JWE, 다섯 부분)은 복호화할 수 없습니다.
- JWKS URL에서 키를 내려받지 않습니다. URL의 JSON을 복사해 붙여넣으세요.
- PKCS#1 "BEGIN RSA PUBLIC KEY" 블록은 지원하지 않습니다. 먼저 SPKI "BEGIN PUBLIC KEY" 블록으로 변환하세요.
- 검증은 서명만 확인합니다. 발급자, 대상 등 다른 클레임이 받아들일 만한지는 애플리케이션이 판단할 일입니다.
- 오래된 브라우저는 EdDSA(Ed25519)를 지원하지 않을 수 있습니다. 키나 알고리즘을 지원하지 않으면 도구가 알려 줍니다.
자주 묻는 질문
여기에 토큰을 붙여넣어도 안전한가요?
토큰은 브라우저의 JavaScript가 디코딩하며 어디로도 전송되지 않습니다. 그래도 운영 환경의 토큰은 비밀번호처럼 다루고, 가능하면 만료된 토큰이나 테스트용 토큰을 쓰세요.
JWT의 내용은 누구나 읽을 수 있나요?
그렇습니다. 헤더와 페이로드는 base64url로 인코딩되어 있을 뿐입니다. JWT 페이로드에 비밀 정보를 넣지 마세요. 서명은 내용이 바뀌는 것을 막을 뿐, 읽는 것을 막지는 않습니다.
"서명이 올바르지 않음"은 무슨 뜻인가요?
서명한 뒤에 토큰이 바뀌었거나, 입력한 키와 다른 키로 서명되었다는 뜻입니다. 올바른 비밀 키를 쓰고 있는지, 헤더의 kid와 맞는 공개 키를 쓰고 있는지 확인하세요.
토큰을 검증하려면 개인 키가 필요한가요?
아닙니다. RS, PS, ES, EdDSA 토큰은 공개 키로 검증합니다. 개인 키를 실수로 붙여넣는 일이 없도록 도구는 개인 키를 받지 않습니다.
"alg": "none"인 토큰은 왜 검증하지 않나요?
이런 토큰에는 서명이 없으므로 확인할 것이 없습니다. 서버는 서명되지 않은 토큰을 명시적으로 기대하는 경우가 아니라면 거부해야 합니다.