JWT와 CSRF 토큰, 세션 쿠키는 동시에 필요한 것일까?

FeelsBotMan·2025년 4월 6일
0

JWT

목록 보기
5/5
post-thumbnail

기본 개념 정리

  1. JWT (JSON Web Token)
  • 클라이언트가 로그인하면 서버는 JWT를 발급
  • 클라이언트는 이 JWT를 Authorization 헤더나 쿠키에 담아 보냄
  • 서버는 이 토큰을 검증해서 인증 처리
  • Stateless 방식 (서버에 세션 저장 X)
  1. 세션 쿠키 (Session Cookie)
  • 서버가 세션을 만들고, 식별용 세션 ID를 클라이언트에 쿠키로 저장
  • 클라이언트는 요청마다 세션 쿠키를 보냄
  • 서버는 세션 ID로 사용자 상태를 찾아서 인증
  • Stateful 방식 (세션 상태를 서버에 저장)
  1. CSRF 토큰
  • 주로 쿠키 기반 인증에서 사용
  • 이유: 쿠키는 자동으로 브라우저가 요청에 포함하므로, 악의적 요청도 세션이 살아있으면 처리될 수 있음 → 그래서 요청이 의도된 것인지 확인하려고 CSRF 토큰 사용

🤔 그렇다면 JWT + 세션 + CSRF 토큰을 모두 써야 할까?

🔹 상황 1: JWT를 Authorization 헤더로 보낸다면

  • ✅ CSRF 토큰은 필요 없음
  • ❌ 세션도 필요 없음 (완전히 stateless)
  • JWT를 로컬스토리지에라도 보관? XSS 공격에 취약함

🔹 상황 2: JWT를 HttpOnly 쿠키에 저장한다면

  • CSRF 토큰 필요
    • 이유: 악의적 사이트가 사용자의 쿠키로 요청을 보낼 수 있음
  • ⚠️ 동시에 세션을 굳이 쓸 필요는 없음 (JWT 자체가 인증 상태를 저장함)
  • SameSite=Strict와 HttpOnly 쿠키를 쓰는 경우, CSRF 토큰은 optional이지만, admin 등 민감 영역엔 추가하기도 함

🔹 상황 3: 기존 세션 기반 인증을 쓰는 경우 (express-session 등)

  • ✅ CSRF 토큰 필요
  • ❌ JWT는 필요 없음 (중복 인증 시스템)

👉 추천 조합

  • ✅ 간편하고 RESTful하게 하고 싶다면:
    JWT + Authorization 헤더 방식 → CSRF 걱정 없음

  • ✅ 보안 우선 + 브라우저 자동처리 + 쿠키 기반 원한다면:
    JWT in HttpOnly Cookie + CSRF Token → CSRF 보호 필수

profile
안드로이드 페페

0개의 댓글