JWT 디버거 / 디코더

JWT를 붙여넣으면 점으로 구분된 세 부분이 디코딩됩니다 — base64url 헤더·페이로드·서명이 등록 클레임(exp, iat, nbf 등)을 현지 시간으로 변환한 예쁘게 출력된 JSON으로 표시됩니다. 이어서 WebCrypto API로 서명을 검증할 수 있습니다. 시크릿이 있는 HMAC(HS256/384/512), 또는 PEM 공개 키가 있는 RSA/ECDSA (RS256/384/512, ES256/384/512)이며, 실험용 샘플 HS256 토큰이 한 번의 클릭으로 준비되어 있습니다. 모든 것이 로컬에서 실행됩니다 — 토큰, 시크릿, 키는 어디에도 전송되지 않습니다.
JWT 토큰 형식: header.payload.signature(점으로 구분된 세 개의 base64url)
경고: 이 토큰은 alg:none을 선언합니다. 즉 서명되지 않았습니다. 실제 서비스는 서명 없는 토큰을 반드시 거부해야 합니다 — 신뢰할 수 없는 것으로 취급하세요.
클레임값해석
시크릿
이 컨텍스트에서는 crypto.subtle을 사용할 수 없으므로 서명 검증이 비활성화됩니다. 활성화하려면 https:로 열거나 로컬 파일에서 여세요. 디코딩은 여전히 작동합니다.
결과 읽는 법: 헤더는 보통 alg(서명 알고리즘)과 typ을 담습니다. 현지 시간 변환과 함께 표시되는 등록 클레임은 iat(발급 시각), nbf(유효 시작)와 exp(만료)입니다 — 붉은 배지는 만료된 토큰, 황색은 24시간 안에 만료된다는 뜻입니다. 서명 검증은 발급자가 계산했을 같은 MAC을 계산하거나 붙여넣은 RSA/ECDSA 공개 키를 확인한 뒤, 토큰을 유효 또는 무효로 표시합니다. 브라우저의 WebCrypto 계층이 구현하는 알고리즘만 검증할 수 있고, 그 외는 추측하는 대신 미지원으로 보고됩니다.

흔한 등록 클레임: sub(주체)는 토큰이 말하는 사용자나 개체입니다 — 샘플에서는 단순 숫자 ID이지만 서비스는 이메일, 사용자 이름, UUID를 넣기도 합니다. iss는 발급자, aud는 의도된 수신자, jti는 재생 방지에 쓰이는 고유 토큰 ID입니다. 이 클레임들은 암호화되지 않았습니다. 토큰을 가진 누구나 읽을 수 있으므로 JWT 페이로드에 비밀번호나 시크릿을 넣지 마세요.

프라이버시: 디코딩과 검증은 전적으로 WebCrypto API로 이 페이지 안에서 일어납니다 — 토큰, 시크릿, 공개 키는 절대 전송되지 않습니다. alg:none 토큰에는 명확한 경고가 표시됩니다: 서명 없는 토큰은 실제 API가 받아들여서는 안 됩니다.