ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] JWT
    Spring 2025. 5. 18. 23:20

    minecraft-font

    #JWT

    💡 Spring 정리: JWT

    📘 개념 정리

    1. Token
      토큰(Token) 은 인증된 사용자인지를 나타내는 증표이며, 요청의 유효성을 검증하는 데 사용되는 디지털 문자열이다.
      • 사용자 로그인 이후 발급됨 (ex. JWT)
      • HTTP Header 등에 담아서 서버에 전달
      • 보통 유효기간(exp)이 있음
      • 탈취 시 위험하므로 보관 위치에 주의해야 함
      JWT는 가장 대표적인 토큰 형식이며, 인증/인가 정보와 만료 정보 등을 자체적으로 포함함

      ▶ 문제점
      1. Cookie/Session 방식보다 Token 자체의 데이터 용량이 많다.
        • 요청이 많아지면 그만큼 트래픽이 증가한다.
      2. Payload(전송되는 데이터)는 암호화되지 않아서 중요한 데이터를 담을 수 없다.
      3. Token을 탈취당하면 대처하기 어려워 만료 시간(30분)을 설정한다.

    2. JWT( JSON Web Token )은 사용자 인증 정보를 Json형식으로 안전하게 전달하기 위해 토큰 규격, 인증과 정보 교환을 위해 설계된 컴팩트하고 수용적인 토큰 이다.

    3. 토큰의 구성은 HEADER + PAYLOAD + SIGNATURE로 구성되어 있다.
    • HEADER는 토큰의 유형(JWT)과 사용하는 해싱 알고리즘(ex: SHA256)을 정의한다.

    • PAYLOAD는 토큰에 담길 데이터를 포함 한다. 데이터는 Claim이라고 부르며, Key - Value 값으로 구성다. 
       주로 담기는 데이터 User Id, Role, exp(만료 시간, 초 단위 UNIX 타임스탬프 예: 1716094953)

    • SIGNATURE 서명은 토큰이 변조 되지 않았음을 보증한다. [무결성을 보장한다.]

                         

    🔄 동작 흐름


         클라이언트가 로그인 정보를 서버에 보냄
      서버는 유효하면 JWT를 발급하여 응답
     클라이언트는 이후 요청에 JWT를 HTTP 헤더에 포함하여 전송
     
    서버는 JWT를 검증하여 인증 여부 판단

     

    🔐 쿠키 VS 세션 VS JWT

    항목 쿠키 세션 JWT
    저장 위치 클라이언트 서버 클라이언트
    서버 부하 낮음 높음 (상태 유지) 낮음 (무상태)
    클라이언트 크기 제한 약 4KB - 수십 KB까지 가능 (Payload 포함)
    서버 요청 시 포함 ✅ 자동 포함 ✅ 세션 ID 포함 ❌ 직접 추가 필요 (Authorization)
    보안 위험 XSS, CSRF 세션 탈취 XSS, 탈취 시 정보 노출
    확장성 낮음 낮음 높음 (서버 확장 쉬움)
    만료 관리 직접 설정 서버 설정 토큰 내부 설정 (exp)

    ⚠️ 실수 및 주의사항

    JWT는 암호화 되어있다.

    • 암호화가 아닌 서명된 토큰일 뿐, 인코딩 된 데이터를 디코딩하면 누구나 데이터를 볼 수 있습니다.

    JWT는 모든 데이터를 넣어도 된다

    • 안됩니다. JWT토큰 내부 정보는 누구든 확인 할 수 있기때문에 정말 중요한 정보는 넣어서는 안됩니다.

    JWT를 사용하면 보안이 다 된다

      • 아닙니다. JWT는 “누가 만든 토큰인지”를 검증할 수 있을 뿐, 토큰 자체에 인증된 신뢰성이 보장되는 건 아닙니다.
        → 내가 만들었으니 토큰 내부 정보를 믿을수 있구나!

     전체 마무리 요약

    JWT는 강력하지만 만능은 아니다!

    민감한 데이터 저장 금지

    짧은 Access Token + 긴 Refresh 전략

    HttpOnly 쿠키와 함께 사용하는 방법도 고려

    'Spring' 카테고리의 다른 글

    [Spring]Cache  (0) 2025.05.22
    [Spring] JWT - 인증과 인가, 그리고 Access, Refresh Token  (1) 2025.05.19
    [Spring] 1차 캐시 & 동일성 보장  (0) 2025.05.07
    [Spring] Dirty Checking  (0) 2025.05.07
    [Spring] Flush 시점  (0) 2025.05.07
Designed by Tistory.