JWT(JSON Web Token)

Oz·2025년 3월 19일
post-thumbnail

JWT(JSON Web Token) 란?

  • 서버와 클라이언트 사이 통신에서 사용되는 JSON 형태의 웹 토큰 인증 및 정보 교환을 위한 토큰의 한 형식임.

이런 형태로 토근을 주고받는 것의 이점은 무엇이고, 왜 최근 JWT의 사용이 늘었을까?

서버의 확장성이 높고, 특정 DB, 서버에 의존하지 않아도 되는 장점이 있음.

JWT 구성

  • 헤더, 페이로드, 서명으로 구성됨.

Header(헤더)

헤더토큰 유형서명 알고리즘 두 가지 정보를 지님.

{
  "alg": "HS256",
  "typ": "JWT"
}

// alg - 서명 알고리즘(SHA 256, RSA 등)
// typ - 토큰 타입

Payload(페이로드)

  1. 페이로드는 토큰에서 사용할 데이터(Claim)를 구성함.

    Claim: key-value 형태의 한 쌍의 정보를 말함.

    서버와 클라이언트 간 실제 사용될 데이터.

    {
      "sub": "1234567890", // subject; 제목
      "name": "John Doe",  // name; 사용자 이름 
      "iat": 1710150400,   // issued At; 발행시간
      "exp": 1710154000    // expiration; 만료 시간
    }

Signature(서명)

  1. 서명은 토큰의 무결성과 인증은 보장하는 암호화된 서명임.

    헤더에서 정의한 알고리즘(alg)를 사용.

    이는 인코딩된 헤더, 페이로드, 비밀키를 결합하여 생성됨.

JWT 인증 방식

  1. 사용자가 로그인하면 서버에서는 JWT 값을 반환함.
  2. 전송된 JWT를 클라이언트는 주로 로컬 스토리지, 쿠키 등에 저장됨.
  3. 이후 서버로 요청할 때 클라이언트에서 Header에 담아서 보냄.(Authorization)
  4. 토큰을 받은 서버는 서명을 확인하고, 페이로드의 내용을 파싱해 데이터를 사용함.

이후 추가적으로 토큰이 만료됐다면, refresh token을 이용해 새로운 토큰을 발급.

위와 같은 방식을 통해 각 개별 서버에서는 따로 세션이나 쿠키처럼 서버 자체에서 값을 불러오는 대신,
매번 요청이 오는 토큰을 파싱해서, 토큰 내부 정보만 사용하면 된다는 장점이 생김.

따라서 이중화된 서버에서도 같은 토큰을 쓴다면, 같은 유저에게 온 요청임을 알 수 있음.

→ 확장성이 높음.

JWT와 다른 인증방식 비교 - 세션

항목세션/쿠키 기반 인증JWT 인증
상태 관리상태 유지 (서버가 세션 데이터를 관리)무상태 (서버 측 세션 데이터 없음)
확장성분산 환경에서 확장성 낮음매우 높은 확장성
폐기 용이성용이(서버에서 세션 무효화 가능)어려움(토큰 블랙리스트 필요)
보안안전하지만 특정 공격에 취약적절한 구현 시 안전
저장 위치서버 측 세션 데이터 저장클라이언트 측 토큰 저장
크로스 도메인 지원동일 출처 또는 CORS 설정에 제한됨JWT를 통한 크로스 도메인 지원

---텍스트

🌐 JWT 토큰 인증 이란? (쿠키 vs 세션 vs 토큰)

[JWT] JSON Web Token 소개 및 구조

Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (2) - JWT란?

profile
Oreo 맛있다!

0개의 댓글