- 1.1 JWT (JSON Web Token)
JWT는 클라이언트와 서버 간의 무상태 인증을 위한 토큰 기반의 표준화된 방식.-
1.1.1 액세스 토큰 (Access Token)
JWT를 사용해 발급되는 짧은 유효 기간의 토큰으로, 요청 시마다 인증을 위해 사용.- 저장 위치: 클라이언트 측에 저장 (로컬 스토리지, 세션 스토리지, 또는 HttpOnly 쿠키).
- 만료 시간: 15분 ~ 1시간 정도로 설정해 탈취 피해 최소화.
-
1.1.2 리프레시 토큰 (Refresh Token)
액세스 토큰 만료 시, 새로운 액세스 토큰 발급을 위해 사용되는 긴 유효 기간의 토큰.- 저장 위치: HttpOnly 쿠키에 저장하여 JavaScript 접근 차단.
- 만료 시간: 7일 ~ 30일 등 긴 시간 동안 유지.
- 역할: 자동 재로그인 기능, 사용자 경험 향상.
-
- 2.1 HttpOnly 쿠키
쿠키를 JavaScript에서 접근할 수 없도록 설정하여 XSS(크로스 사이트 스크립팅) 공격을 방지.- 2.1.1 HttpOnly 속성: 클라이언트 측의 JavaScript에서 쿠키를 읽지 못하도록 차단.
- 2.1.2 Secure 속성: 쿠키가 HTTPS 연결에서만 전송되도록 보장.
- 3.1 CSRF (Cross-Site Request Forgery) 방어
사용자의 권한을 도용해 악의적인 요청을 서버에 전송하는 CSRF 공격을 방지하는 전략.-
3.1.1 CSRF 토큰 (Csurf)
서버가 각 요청마다 고유한 CSRF 토큰을 발급하고, 요청 시 클라이언트가 해당 토큰을 포함하여 전송.- 역할: 모든 요청에서 요청의 정당성 검증.
- 클라이언트-서버 간 상호작용: CSRF 토큰을 헤더 또는 폼 데이터에 포함해 전송.
-
3.1.2 SameSite 쿠키
쿠키가 크로스 사이트 요청에서 전송되지 않도록 설정하여 CSRF 공격을 방지.- Strict: 동일 사이트 요청에서만 쿠키 전송.
- Lax: 기본적으로 차단하되, 일부 안전한 요청에서는 허용.
- None: 크로스 사이트 요청에서도 쿠키 전송 가능 (단,
secure
속성 필수). - 역할: 크로스 사이트 요청 자체를 차단함으로써 CSRF 위험을 줄임.
-
- 4.1 JWT: 클라이언트-서버 간 인증 처리.
- 4.2 액세스 토큰: 짧은 만료 시간으로 사용자의 인증을 처리.
- 4.3 리프레시 토큰: 액세스 토큰 만료 시 새로운 액세스 토큰을 발급.
- 4.4 HttpOnly 쿠키: 리프레시 토큰을 안전하게 저장.
- 4.5 CSRF 방어: CSRF 토큰을 통해 요청의 정당성을 검증하고, SameSite 속성으로 크로스 사이트 요청을 제한.
1. **인증 및 보안 체계 (JWT)**
├── **액세스 토큰** (짧은 만료 시간)
└── **리프레시 토큰** (긴 만료 시간, HttpOnly 쿠키에 저장)
2. **JWT 사용 시 보안 강화**
└── **HttpOnly 쿠키** (XSS 방어)
3. **CSRF 방어 전략**
├── **CSRF 토큰** (요청의 정당성 검증)
└── **SameSite 쿠키** (크로스 사이트 요청 차단)
4. **최종 보안 조합**
├── **JWT**
├── **액세스 토큰**
├── **리프레시 토큰** (HttpOnly 쿠키에 저장)
└── **CSRF 방어** (CSRF 토큰 + SameSite 쿠키)