JWT 디코더 / 인코더
JWT 토큰을 즉시 디코딩하고 분석하거나, 서명된 JWT를 생성하세요. 100% 클라이언트 처리.
모든 처리는 브라우저에서만 이루어집니다. 어떤 서버로도 데이터가 전송되지 않습니다.
JWT(JSON Web Token)란?
JWT(JSON Web Token)는 당사자 간에 정보를 안전하게 JSON 객체로 전송하기 위한 개방형 표준(RFC 7519)입니다. 웹 애플리케이션의 인증과 정보 교환에 널리 사용됩니다. JWT는 Base64URL 인코딩된 것으로 암호화가 아니기 때문에 누구나 페이로드를 디코딩할 수 있습니다. 암호화 없이 민감한 정보를 JWT에 저장하지 마세요.
JWT 구조
예제
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
HeaderPayloadSignature
Header
토큰 타입(typ)과 서명 알고리즘(alg, 예: HS256, RS256)을 포함합니다.
Payload
클레임(Claims)을 포함합니다. 사용자 정보와 만료 시간(exp), 발급 시간(iat), 주체(sub) 등의 메타데이터가 담깁니다.
Signature
헤더와 페이로드를 시크릿 키로 서명한 값입니다. 토큰이 변조되지 않았음을 검증하는 데 사용됩니다.
주요 클레임
| Claim | 주요 클레임 |
|---|---|
| iss | 발급자 |
| sub | 주체 (사용자 ID) |
| aud | 수신자 |
| exp | 만료 시간 |
| iat | 발급 시간 |
| nbf | 유효 시작 시간 |
| jti | JWT 고유 식별자 |
자주 묻는 질문
JWT는 암호화된 토큰인가요?
아니요. 일반적인 JWT(JWS)는 서명만 되어 있고 암호화는 아닙니다. 페이로드는 Base64URL로 인코딩되어 있어 누구나 디코딩할 수 있습니다. 비밀번호 같은 민감 정보를 JWT 페이로드에 넣지 마세요.
서명 검증에 시크릿 키가 필요한 이유는?
HMAC 기반 서명(HS256 등)은 공유된 시크릿을 사용합니다. 시크릿 없이는 서명이 올바른지 확인할 수 없습니다. 페이로드 디코딩과 서명 검증은 별개의 작업입니다.
exp 클레임이 없으면 만료가 안 되나요?
exp가 없으면 토큰 자체는 만료되지 않습니다. 서버에서 토큰 블랙리스트 등 별도 무효화 메커니즘을 구현해야 합니다.
HS256과 RS256의 차이는 무엇인가요?
HS256은 모든 당사자가 공유하는 대칭 시크릿 키를 사용합니다. RS256은 비대칭 키 쌍(개인 키로 서명, 공개 키로 검증)을 사용하여 마이크로서비스나 서드파티 검증에 더 적합합니다.
JWT를 어디에 저장해야 하나요?
XSS 공격을 방어하는 HttpOnly 쿠키를 권장합니다. localStorage에 저장하면 편리하지만 XSS에 취약합니다.
Refresh Token이란?
Refresh Token은 Access Token이 만료된 후 재로그인 없이 새 Access Token을 발급받기 위한 별도의 장기 토큰입니다.
여기에 붙여넣은 JWT가 서버로 전송되나요?
아니요. 모든 디코딩과 인코딩은 브라우저 내 JavaScript로만 처리됩니다. 어떤 서버로도 전송되지 않습니다.