Java/Spring

쿠키 - SameSite 및 Domain 설정에 따른 쿠키 전달 이슈

파란배개 2025. 4. 18. 14:22

1. SameSite 설정

SameSite 옵션은 브라우저에서 쿠키가 요청에 포함되는 조건을 제어한다. 특히 서로 다른 도메인 간의 요청(크로스 사이트 요청)에 대해 보안을 강화하는 역할을 한다.

SameSite의 종류

  • Strict: 같은 사이트에서만 쿠키가 전송된다. (가장 엄격)
  • Lax: 대부분의 상황에서 같은 사이트에서만 전송되지만, 일부 GET 요청은 허용
  • None: 다른 도메인에서도 쿠키가 전송됨. 단, Secure 플래그가 반드시 함께 설정되어 있어야 한다.

설정 예시 (Spring Boot 기준)

ResponseCookie.from("token", tokenValue)
    .sameSite("None") // 크로스 도메인 허용
    .secure(true)     // SameSite=None을 위해 필수
    .httpOnly(true)
    .path("/")
    .build()

SameSite=None 설정 위치

  • Spring Boot (WebFlux): ResponseCookie 설정 시 .sameSite("None")
  • Spring Boot (Servlet): Set-Cookie 헤더 직접 조작 또는 필터에서 추가 설정 필요
  • 프론트엔드 (JS): 쿠키를 수동 설정할 경우 document.cookie로는 SameSite 지정이 불가. 서버 측에서 설정해야 함.

주의사항

  • 기본값은 Lax이기 때문에 다른 도메인에서의 쿠키 전송이 안 될 수 있음
  • 다른 도메인 간에 쿠키를 주고받으려면 SameSite=NoneSecure=true를 반드시 같이 설정해야 함

2. Domain 설정

쿠키의 Domain 속성은 쿠키가 어떤 도메인에서 유효한지를 결정한다.

설정 원칙

  • Domaingupen.store로 설정하면 api.gupen.store, www.gupen.store에서는 쿠키가 동작하지 않음
  • .gupen.store로 설정해야 하위 도메인 모두에서 유효

예시

ResponseCookie.from("token", tokenValue)
    .domain(".gupen.store") // 하위 도메인까지 쿠키 유효
    .build()

주의사항

  • 도메인 앞에 .(dot)을 붙이지 않으면 해당 도메인에만 국한됨
  • localhost127.0.0.1 환경에서는 Domain 속성 설정을 피하는 것이 좋음 (브라우저에서 거부됨)

✅ 요약

SameSite None 다른 도메인 간에도 쿠키 전달 허용
Secure true HTTPS 환경에서만 쿠키 허용 (SameSite=None일 때 필수)
Domain .gupen.store 하위 도메인 전체에서 쿠키 유효

 

'Java > Spring' 카테고리의 다른 글

Web Server와 WAS  (1) 2025.02.16
어노테이션(Annotation)  (2) 2025.02.09
Spring Security  (0) 2025.02.06
OSIV  (0) 2025.02.06
Servlet, Dispatcher Servlet, Servlet Container  (0) 2025.02.02