솔솔

[JWT] JWT란? 본문

나의보물들/Authentication

[JWT] JWT란?

솔솔하네 2025. 1. 14. 11:31
반응형

🍀 JWT란?


JWT(Json Web Token)는 두 개체 간의 정보를 JSON 객체 형태로 안전하게 전달하기 위한 토큰 기반 인증 방식. JWT는 주로 사용자 인증 및 권한 부여를 위해 사용되며, 웹 애플리케이션에서 널리 사용됨.

 

🍀 JWT의 구조


Header (헤더)

  • 토큰의 타입(JWT)과 서명 알고리즘(예: HMAC SHA256)을 정의 함.
{
  "alg": "HS256",
  "typ": "JWT"
}

 

Payload (페이로드)

  • 토큰에 포함될 실제 데이터(클레임)를 담고 있음.
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

 

Signature (서명)

  • 헤더와 페이로드를 결합한 후 비밀 키(JWT Secret)와 함께 해싱하여 생성 됨.
  • 서명은 토큰의 무결성을 검증하는 데 사용 됨.

 

🍀  JWT 인코딩 시각화


 

* JWT 공식 사이트인데 JWT의 인코딩이 어떻게 되는지 시각화해서 보기 좋습니다.

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

 

by. 솔솔하네

 

JWT 생성 과정

1. Header (헤더)

Base64Url(Header)

 

 

2. Payload (페이로드)

Base64Url(Payload)

 

3. Signature (서명)

Signature = HMACSHA256(
    Base64Url(Header) + "." + Base64Url(Payload), 
    SecretKey
)

 

4. JWT 생성

Base64Url(Header) + "." + Base64Url(Payload) + "." + Signature

 

 

🍀  세션쿠키랑 비교했을 때 JWT 장점


1. 무상태성 (Stateless)

세션 방식은 서버가 세션 정보를 메모리나 데이터베이스에 저장하기 때문에 서버의 리소스를 소모하며 확장성이 제한될 수 있음.
반면, JWT는 서버가 사용자 상태(Session)를 저장하지 않고, 클라이언트가 요청마다 JWT를 전송하므로 서버는 별도의 세션 저장소를 유지할 필요가 없음.

 

 

2. 자체 포함(Self-contained)

세션 쿠키 방식에서는 쿠키에 세션 ID만 저장되며, 서버가 해당 ID를 조회해 사용자 정보를 가져와야 하므로 요청 시마다 데이터를 조회해야 함. 반면, JWT는 헤더, 페이로드, 서명으로 구성되며, 페이로드에 사용자 정보(예: 권한, 사용자 ID 등)가 포함되어 있어 서버가 별도로 데이터를 조회하지 않아도 인증 정보를 확인할 수 있음.

 

3. 유연한 저장 위치

세션 쿠키는 기본적으로 브라우저의 쿠키에 저장되며, 브라우저 환경에서 주로 사용됨.
반면, JWT는 쿠키뿐만 아니라 HTTP 헤더(예: Authorization: Bearer <token>), 로컬 스토리지, 세션 스토리지 등 다양한 저장 위치를 지원하므로 브라우저 외의 환경에서도 유연하게 사용할 수 있음.

 

4. 다중 플랫폼 지원

세션 쿠키는 브라우저 기반 애플리케이션에서 사용하기 적합하며, 비브라우저 환경에서는 사용이 제한적일 수 있음.
반대로, JWT는 HTTP 헤더를 통해 전달되므로 웹, 모바일, 데스크톱 등 다양한 클라이언트에서 쉽게 사용할 수 있으며, RESTful API와의 호환성이 뛰어남.

 

5. 토큰 기반 인증

세션 쿠키는 서버에서 세션을 관리하며, 브라우저 기반 인증에 적합함. 그러나 API 인증에는 적합하지 않을 수 있음.
반면, JWT는 클라이언트가 토큰을 보유하고 있으면 인증된 것으로 간주되며, 토큰 기반 인증을 통해 SSO와 같은 기능 구현이 가능함.

 

7. 만료 시간 제어

세션 쿠키의 만료 시간은 서버에서 별도로 관리해야 하며, 세션이 만료되면 추가적인 작업이 필요할 수 있음.
반면, JWT는 토큰 자체에 만료 시간을 포함할 수 있어, 클라이언트와 서버 간의 추가 작업 없이도 만료 시간을 관리할 수 있음.

 

 

'나의보물들 > Authentication' 카테고리의 다른 글

[Spring Security] HTTP Basic 인증  (0) 2025.01.16
[JWT] Linux에서 JWT Secret 생성 방법  (0) 2025.01.11