ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JWT란? 🚀 특징과 보안 주의사항 완벽 정리!
    Developer 2025. 3. 19. 09:00
    728x90

    1. JWT(Json Web Token)란?

    JWT(Json Web Token)JSON 기반의 토큰을 사용하여 사용자 인증 및 정보 교환을 수행하는 방식입니다.

    쉽게 말해?

    "서버가 사용자를 인증하면, 토큰을 발급하여 클라이언트가 이후 요청 시 인증할 수 있도록 하는 방식!"

    • "세션을 저장하지 않고, 자체적으로 정보를 포함하는 토큰!"

     

    📌 JWT 사용 예제:

    1. 사용자가 로그인하면 서버가 JWT를 생성하여 클라이언트에게 전달 🎟️
    2. 클라이언트는 이후 요청마다 JWT를 포함하여 서버에 전송 🚀
    3. 서버는 JWT의 유효성을 확인하고 요청을 처리 🔒

    2. JWT의 구조 🏗️

    JWT는 헤더(Header), 페이로드(Payload), 서명(Signature) 3가지 파트로 구성됩니다.

    Header.Payload.Signature

    📌 1) Header (헤더)

    • 토큰 유형(typ)과 해싱 알고리즘(alg)을 포함
    {
      "alg": "HS256",
      "typ": "JWT"
    }

    📌 2) Payload (페이로드)

    • 토큰에 담을 정보 (클레임, Claims)
    • 예제:
    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }

    📌 3) Signature (서명)

    • 토큰의 무결성을 보장하는 서명 (비밀 키를 사용하여 생성)

    결론: JWT는 Base64 인코딩된 문자열이며, 디지털 서명을 포함하여 위변조를 방지!


    3. JWT의 특징 🚀

    1) 세션 관리 없이 인증 가능

    • 세션을 저장할 필요 없이, 토큰을 통해 사용자 인증 진행

    2) 무상태(Stateless) 및 확장성

    • 서버가 세션 정보를 저장하지 않으므로 마이크로서비스와 분산 시스템에서 활용하기 적합!

    3) 정보 포함 가능 (Self-contained)

    • 토큰 자체에 사용자 정보가 포함되므로, 별도 DB 조회 없이 사용 가능!

    4) 다양한 환경에서 사용 가능

    • REST API, OAuth, GraphQL 등 다양한 환경에서 인증에 활용됨

    4. JWT 보안 주의사항 ⚠️

    🚨 1) 토큰 탈취 방지

    • JWT는 URL, LocalStorage, 쿠키에 저장할 수 있지만 XSS 공격에 취약할 수 있음!
    • 권장 저장 방식:
      • HttpOnly Cookie에 저장 (XSS 방어)
      • 필요 시 로컬 스토리지에 저장하되 보안 강화 필요

    🚨 2) 서명(Signature)은 암호화가 아님!

    • JWT는 서명(Signature)이 있어 무결성은 보장되지만, Payload 내용은 누구나 디코딩 가능
    • 중요 정보(비밀번호, 금융 정보)는 JWT에 저장하면 안 됨!

    🚨 3) 토큰 유효기간(Expiration) 설정 필수

    • 짧은 만료 시간을 설정하고, 리프레시 토큰(Refresh Token)과 함께 사용
    • 예제:
    {
      "exp": 1716239022
    }

    🚨 4) HTTPS 필수 사용

    • JWT가 탈취되면 누구나 사용할 수 있으므로, HTTPS로 전송하여 중간자 공격(MITM) 방지

    🚨 5) 블랙리스트 관리 필요

    • JWT는 서버에서 세션을 저장하지 않기 때문에 사용자가 로그아웃해도 토큰이 유효함.
    • 이를 방지하기 위해, 블랙리스트 또는 짧은 만료 시간 + 리프레시 토큰 전략 활용

    5. JWT vs 세션 기반 인증 비교 📊

    비교 항목 JWT 세션 기반 인증
    서버 저장 여부 ❌ 저장 필요 없음 ✅ 세션 저장 필요
    확장성 ✅ 뛰어남 (무상태) ❌ 확장성 낮음
    보안 위험 ❌ 토큰 탈취 위험 존재 ✅ 서버에서 관리 가능
    로그아웃 처리 ❌ 블랙리스트 필요 ✅ 세션 삭제 가능
    사용 사례 API, 모바일 앱 일반 웹사이트

     

    결론:

    • JWT는 무상태(Stateless) 인증이 필요할 때 적합
    • 세션 기반 인증은 보안이 중요한 환경에서 유리함

    6. JWT 사용 예제 💡

    JWT 생성 (Node.js + jsonwebtoken)

    const jwt = require('jsonwebtoken');
    const secretKey = "mySecretKey";
    
    const token = jwt.sign({ id: 1, username: "user123" }, secretKey, { expiresIn: "1h" });
    console.log(token);

    JWT 검증

    jwt.verify(token, secretKey, (err, decoded) => {
      if (err) {
        console.log("토큰 검증 실패");
      } else {
        console.log("디코딩된 정보:", decoded);
      }
    });

    📌 이처럼 JWT는 인증 과정에서 빠르고 간편하게 활용할 수 있음!


    7. 결론 🎯

    JWT는 세션 없이 인증할 수 있는 강력한 방법!
    서버 확장성이 뛰어나고 API 인증에 적합!
    하지만 보안 문제를 고려하여 올바르게 사용해야 함! 🔥

    👉 이제 JWT를 활용하여 안전하고 확장성 있는 인증 시스템을 구축해 보세요! 🚀

     
    728x90
Designed by Tistory.