Infra/Security
[Security] JWT + HttpOnly Cookie + SameSite 전략 정리
carsumin
2026. 2. 14. 14:02
현재 구조
- 둘 다 LocalStorage에 저장하면?
- XSS 공격 시 탈취 위험
- 보안 취약
- 둘 다 쿠키에 넣으면?
- CSRF 위험 증가
- 현재 구조는
- Access Token -> JS에서 제어 가능
- Refresh Token -> HttpOnly로 JS 접근 차단
- SameSite로 CSRF 방어
| 토큰 | 저장 위치 | 목적 |
| Access Token | Authorization Header | API 인증 |
| Refresh Token | HttpOnly Cookie | 재발급용 |
HttpOnly가 하는 일
.httpOnly(true)
- JS에서 쿠키 접근 불가
- document.cookie로 읽을 수 없음
- XSS 방어
SameSite 옵션 정리
- Strict
- 다른 사이트에서 절대 쿠키 전송 안됨
- 보안 강함
- UX 깨질 수 있음
- Lax
- GET 이동은 허용
- POST 자동 전송 등은 차단
- CSRF 대부분 방어
- 일반 웹 서비스에 적절
- None
- 모든 요청에 쿠키 전송
- 반드시 Secure = true 필요
- 프론트 / 백 도메인 분리 시 필수
- 로컬 개발
.httpOnly(true)
.sameSite("Lax")
.secure(false)
- 배포 후
.httpOnly(true)
.sameSite("None")
.secure(true)
전체 보안 구조
[Login]
↓
AccessToken → 응답 body
RefreshToken → HttpOnly Cookie
[API 요청]
Authorization: Bearer AccessToken
[Access 만료]
↓
POST /auth/refresh
↓
Cookie에 있는 RefreshToken 자동 전송
↓
새 AccessToken 발급
RefreshToken을 쿠키에 넣은 이유
- JS 접근 차단
- 자동 전송
- XSS 공격 시 탈취 어려움