-
[Spring] JWTSpring 2025. 5. 18. 23:20#JWT
💡 Spring 정리: JWT
📘 개념 정리
- Token
▶ 토큰(Token) 은 인증된 사용자인지를 나타내는 증표이며, 요청의 유효성을 검증하는 데 사용되는 디지털 문자열이다.
- 사용자 로그인 이후 발급됨 (ex. JWT)
- HTTP Header 등에 담아서 서버에 전달
- 보통 유효기간(exp)이 있음
- 탈취 시 위험하므로 보관 위치에 주의해야 함
▶ 문제점
- Cookie/Session 방식보다 Token 자체의 데이터 용량이 많다.
- 요청이 많아지면 그만큼 트래픽이 증가한다.
- Payload(전송되는 데이터)는 암호화되지 않아서 중요한 데이터를 담을 수 없다.
- Token을 탈취당하면 대처하기 어려워 만료 시간(30분)을 설정한다.
- JWT( JSON Web Token )은 사용자 인증 정보를 Json형식으로 안전하게 전달하기 위해 토큰 규격, 인증과 정보 교환을 위해 설계된 컴팩트하고 수용적인 토큰 이다.
- 토큰의 구성은 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는 “누가 만든 토큰인지”를 검증할 수 있을 뿐, 토큰 자체에 인증된 신뢰성이 보장되는 건 아닙니다.
전체 마무리 요약
✨ 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 - Token