[Spring] JWT

이연우·2025년 7월 28일

TIL

목록 보기
61/100

🔐 JWT 인증이란?

  • JWTBase64로 인코딩된 문자열로,
    인증에 필요한 정보를 안전하게 주고받기 위해 사용됨
    Payload는 암호화되지 않음민감한 정보는 절대 담지 말 것!
    목적은 정보 보호가 아니라 위조 방지(Signature 검증)

🔁 JWT 인증 과정

  1. 클라이언트가 로그인 요청

  2. 로그인 성공 → 서버는 Header + Payload + SecretKey로 Signature 생성

    • 전체 JWT를 Base64로 인코딩하여 JWT 발급
    • 일반적으로 CookieLocalStorage에 저장
  3. 이후 요청 시 Authorization: Bearer {JWT} 형태로 전송

  4. 서버는 JWT의 Signature, 만료 여부 확인 후 인증 완료

🔍 JWT의 유효성 검사

  1. A 사용자의 JWT를 B가 탈취

  2. B가 JWT의 Payload를 임의로 수정

  3. B가 서버에 요청 시도

  4. 서버는 Signature를 자체적으로 생성해 비교
    불일치 감지위조 차단

💡 Signature는 서버가 가진 SecretKey로만 생성 가능하므로 조작 불가


🛡️ JWT 장단점

✅ JWT의 장점

항목설명
🔒 변조 방지Signature를 통해 위조 여부를 서버에서 검증할 수 있음
🚫 서버 무상태 (Stateless)인증 상태를 서버에 저장하지 않음 → 메모리 사용 X
🚀 성능 우수매 요청마다 DB 조회 없이 유저 정보를 빠르게 판별 가능
🌐 다양한 환경 지원웹, 모바일 앱, API 등 다양한 플랫폼에서 사용 가능
⚖️ 확장성 우수서버 간 세션 공유 없이도 인증 유지 가능 → Scale-Out에 적합
📦 자체 정보 포함토큰 자체에 인증 정보(Claim)를 담고 있어 별도 저장소 불필요

⚠️ JWT의 단점

항목설명
🔓 Payload 노출Base64 인코딩만 되어 있어 누구나 디코딩 가능
→ 민감 정보 저장 불가
🧠 탈취 시 대응 어려움클라이언트가 토큰을 보관하므로 탈취되면 재발급 외 대처 어려움
📏 토큰 크기 큼Header + Payload + Signature로 인해 트래픽 증가 가능성
⏳ 만료 시 UX 저하Access Token 만료 후 자주 로그인을 요구하면 사용자 경험 악화
🔁 취소 불가발급된 JWT는 중간에 강제로 폐기하기 어렵고, DB에서 관리도 어려움
(→ Refresh Token 필요)

🔐 Access Token, Refresh Token

  • JWT는 탈취에 취약하므로 만료 시간을 설정해야 하며,
    이로 인해 생기는 UX 문제를 해결하기 위해 두 가지 Token을 사용함

🎯 Token의 유형

Token 종류설명
Access Token사용자 인증 후 발급되는 짧은 생명 주기의 인증용 토큰
♻️ Refresh TokenAccess Token이 만료되었을 때 재발급 요청용 토큰
보통 DB에 저장됨

🔁 Access/Refresh 인증 흐름

  1. 로그인 요청 → Access Token + Refresh Token 발급

  2. Access Token을 클라이언트에 저장 (보통 헤더에 담아 요청)

  3. Access Token 만료 시 → Refresh Token으로 재발급 요청

  4. 서버에서 Access Token 재발급 → 클라이언트는 교체 후 사용

💡 Refresh Token 사용 이유

  • Access Token만 사용하면 보안 위험:

    • 탈취되면 → 유효시간 끝날 때까지 제한 없이 사용됨
  • Refresh Token 사용 시:

    • Access Token을 자주 교체해도 사용자는 로그인 유지
    • Refresh Token은 DB에 저장되므로 블랙리스트 관리 가능

🧠 요약 정리

항목요약
🔑 JWTHeader + Payload + Signature로 구성된 인증 토큰
🔍 인증 방식서버가 Signature와 만료 시간으로 유효성 검증
⚠️ 주의Payload는 암호화되지 않음 → 민감 정보 저장 금지
✅ 장점서버 무상태 유지, 빠른 인증, 확장성 우수
❗ 단점탈취 시 위험, 크기 큼, 재발급 필요
♻️ Access/RefreshUX와 보안성을 동시에 잡기 위한 토큰 이중화 구조

📺 추천 영상
JWT 대충 쓰면 님들 코딩인생 끝남

0개의 댓글