토큰을 붙여넣으면 헤더와 페이로드를 해석합니다. 토큰은 브라우저 안에서만 처리되며 서버로 전송되지 않습니다.
-
-
JWT는 점(.)으로 구분된 세 부분입니다.
헤더.페이로드.서명
eyJhbGci... . eyJzdWIi... . SflKxwRJ...
alg)과 타입(typ)가장 중요한 오해입니다. 페이로드는 base64로 인코딩되어 있을 뿐이라 누구나 열어볼 수 있습니다. 이 도구가 비밀키 없이 내용을 보여주는 것이 그 증거입니다.
따라서 JWT에 비밀번호, 주민번호, 카드번호 같은 민감정보를 넣으면 안 됩니다. 서명은 "내용이 바뀌지 않았음"을 보장할 뿐 "내용이 안 보임"을 보장하지 않습니다.
iss (issuer) — 토큰 발급자sub (subject) — 토큰의 주체. 보통 사용자 ID.aud (audience) — 이 토큰을 받아야 할 대상exp (expiration) — 만료 시각. 이 시각이 지나면 거부해야 합니다.nbf (not before) — 이 시각 이전에는 유효하지 않음iat (issued at) — 발급 시각jti (JWT ID) — 토큰 고유 식별자. 재사용 방지에 씁니다.시각 값은 모두 유닉스 타임스탬프(초)입니다. 밀리초로 착각해서 1000을 곱하거나 나누는 실수가 흔합니다.
서명을 검증하려면 비밀키나 공개키가 필요한데, 그 키를 웹 도구에 입력하는 것은 위험합니다. 이 도구는 내용 확인 전용입니다. 실제 검증은 서버 쪽 라이브러리에서 해야 합니다.
보안상 주의할 점: alg: none으로 서명 없이 온 토큰을 그대로 신뢰하는 구현 오류가 과거에 큰 취약점이었습니다. 검증할 때는 알고리즘을 서버가 지정하고, 토큰이 알려준 alg를 그대로 따라가지 않도록 해야 합니다.