자주 묻는 질문
JWT 서명도 검증하나요?
아니요. 서명 검증에는 발급자의 비밀 키 또는 공개 키가 필요한데, 범용 웹 도구는 그 키를 가질 수 없습니다. 이 디코더는 헤더와 페이로드 내용만 보여줍니다. 검증은 서버 측 라이브러리(jsonwebtoken·jose·PyJWT 등)에서 올바른 키로 수행하세요.
입력한 토큰이 서버로 전송되나요?
아니요. 디코드는 atob와 TextDecoder를 사용해 브라우저 안에서 완결됩니다. 토큰은 페이지 밖으로 나가지 않습니다. 그래도 운영 토큰은 신중히 다루세요. 어떤 도구든 붙여 넣는 행위는 클립보드 기록이나 스크린샷을 통해 유출될 경로를 하나 더 만드는 것입니다.
어떤 JWT 알고리즘을 지원하나요?
전부 지원합니다. 디코더가 알고리즘을 무시하기 때문입니다. HS256·RS256·ES256·EdDSA 무엇이든, 헤더와 페이로드는 base64url로 인코딩된 JSON일 뿐입니다. 알고리즘이 의미를 갖는 시점은 검증 단계뿐입니다.
JWE(암호화 토큰)도 디코드되나요?
아니요. JWE는 3개가 아니라 5개 세그먼트를 가지며, 페이로드는 base64로 인코딩된 JSON이 아니라 암호화되어 있습니다. 복호화에는 키와 JOSE라이브러리가 필요합니다. 실무에서 "JWT"라고 부르는 것의 대부분은 JWS(서명만, 암호화 없음)이며 이쪽은 이 도구로 다룰 수 있습니다.
만료 일시 표시가 예상과 다른 이유는?
JWT의 exp는 UTC기준 Unix초이며, 밀리초도 아니고 로컬 타임존도 아닙니다. 배지는 UTC날짜를 표시합니다. 서버가 밀리초로 발급하는 경우(비표준이지만 흔한 실수) 연도가 1970으로 표시됩니다. 발급 측을 고쳐야 한다는 신호입니다.
관련 개념
JWT는 base64url로 인코딩된 3개 세그먼트(헤더·페이로드·서명)를 점으로 연결한 형식입니다. 헤더는 서명 알고리즘(alg)과 토큰 종류를 알립니다. 페이로드는 클레임의 JSON객체로, 등록된 클레임(iss = 발급자, sub = 주체, aud = 수신자, exp = 만료, iat = 발급 시각)에 더해 발급 측이 추가하는 임의의 커스텀 클레임이 들어갑니다. 서명은 헤더에서 선언한 알고리즘으로 헤더+페이로드에 대해 계산됩니다.
base64url은 일반 base64와 두 글자(+/ 대신 -_)가 다르고 패딩을 생략합니다. 그래서 JWT를 일반 base64디코더에 붙여 넣으면 대체로 실패합니다. JWT는 암호화되지 않습니다. 토큰을 가진 사람은 누구나 내용을 읽을 수 있습니다. 페이로드에 비밀 정보를 넣지 마세요. 서명은 페이로드가 변조되지 않았음을 보장할 뿐 내용의 비밀성은 보장하지 않습니다. 암호화가 필요하다면 JOSE패밀리에 JWE가 정의되어 있습니다(이 도구로는 다룰 수 없음).