JWT란?

JWT(JSON Web Token)는 당사자 간에 정보를 안전하게 전송하기 위한 컴팩트한 자기 포함 토큰 형식입니다. JWT의 정의, 작동 원리, 사용 사례를 알아보세요.

Definition
JSON Web Token

JWT는 당사자 간에 JSON 객체로 정보를 안전하게 전송하는 컴팩트하고 자기 포함적인 방법을 정의하는 개방형 표준(RFC 7519)입니다. 토큰은 비밀 키를 사용한 HMAC 또는 키 쌍을 사용한 RSA/ECDSA로 디지털 서명되어 검증 및 신뢰가 가능합니다. JWT는 웹 애플리케이션의 인증 및 권한 부여에 가장 일반적으로 사용됩니다.

JWT 구조

JWT는 점(.)으로 구분된 세 가지 Base64URL 인코딩 부분으로 구성됩니다: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IuyWtOyKpO2KuCIsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c • 헤더(Header) — 알고리즘 및 토큰 유형: {"alg": "HS256", "typ": "JWT"} • 페이로드(Payload) — 클레임(데이터): {"sub": "1234", "name": "홍길동", "iat": 1516239022} • 서명(Signature) — HMACSHA256(base64(헤더) + "." + base64(페이로드), 비밀 키)

JWT 인증 작동 방식

1. 사용자가 자격 증명으로 로그인 2. 서버가 자격 증명을 검증하고 비밀 키로 서명된 JWT 생성 3. 서버가 클라이언트에게 JWT 전송 4. 클라이언트가 JWT 저장 (보통 localStorage 또는 쿠키에) 5. 클라이언트가 모든 요청의 Authorization 헤더에 JWT 포함: Authorization: Bearer <토큰> 6. 서버가 JWT 서명 검증 — 유효하면 요청 승인 7. 데이터베이스 조회 불필요 — 페이로드에 모든 사용자 정보 포함

JWT 클레임

페이로드에는 클레임이 포함됩니다 — 사용자에 관한 설명과 추가 데이터: • 등록된 클레임(표준): iss(발급자), sub(주체), aud(대상), exp(만료), iat(발급 시간) • 공개 클레임: 충돌 방지를 위해 등록해야 하는 사용자 정의 클레임 • 비공개 클레임: 당사자 간 정보 공유를 위한 커스텀 클레임 중요: JWT 페이로드는 Base64 인코딩만 되어 있으며, 암호화되지 않습니다. 누구나 페이로드를 디코딩하여 읽을 수 있습니다 — JWT 페이로드에 민감한 데이터를 절대 넣지 마세요.

Try it yourself

Base64 디코딩하기

JWT에 대하여

JWT는 2010년에 도입되어 2015년 RFC 7519로 공식 표준화되었습니다. 세션 기반 인증의 무상태(stateless) 대안으로 널리 채택되었습니다 — 모든 정보가 토큰 자체에 포함되어 있어 서버가 세션 데이터를 저장할 필요가 없습니다. 생태계에는 JWS(JSON Web Signature), JWE(JSON Web Encryption), JWK(JSON Web Key) 표준도 포함됩니다.

FAQ

JWT는 무엇의 약자인가요?
JWT는 JSON Web Token의 약자입니다.
JWT 페이로드는 안전한가요?
아닙니다. JWT 페이로드는 Base64 인코딩만 되어 있어 누구나 디코딩할 수 있습니다. 암호화되지 않습니다. JWT는 데이터가 변조되지 않았음을(서명을 통해) 보장할 뿐, 비공개임을 보장하지 않습니다. 암호화된 토큰이 필요하면 JWE(JSON Web Encryption)를 사용하세요.
JWT와 세션 쿠키의 차이점은 무엇인가요?
세션 쿠키는 서버가 데이터베이스에서 조회하는 세션 ID를 저장합니다. JWT는 자기 포함적이어서 서버는 서명만 검증하면 됩니다. JWT는 무상태(데이터베이스 불필요)이지만 추가 인프라 없이는 무효화할 수 없는 반면, 세션 쿠키는 즉시 무효화할 수 있습니다.

관련 도구