103 lines
11 KiB
Markdown
103 lines
11 KiB
Markdown
---
|
||
title: official-doc / Spring Boot `Cookie.SameSite` enum Javadoc — accepted SameSite attribute values
|
||
source_type: official-doc
|
||
url: https://docs.spring.io/spring-boot/api/java/org/springframework/boot/web/server/Cookie.SameSite.html
|
||
archive_url:
|
||
related_branches: [feature-keycloak-bff-csrf-samesite-defense]
|
||
related_projects: [keycloak-patterns-overview]
|
||
tags: [official-doc, keycloak-patterns, auth, spring-boot, samesite]
|
||
created: 2026-07-25
|
||
---
|
||
|
||
# official-doc / Spring Boot `Cookie.SameSite` enum Javadoc — accepted SameSite attribute values
|
||
|
||
> Layer: `raw/` — 외부 자료(공식 문서 / 대기업 기술 블로그)의 **원문 발췌·출처 기록**.
|
||
> 본 템플릿은 `raw/official-docs/` 와 `raw/company-tech-blogs/` 두 폴더가 공유.
|
||
> 검증된 요약은 `/ingest` 후 `wiki/concepts/`에 `source-summary-template` 형식으로 별도 작성. 원본은 raw에 영구 보관.
|
||
|
||
## source_type 허용값
|
||
|
||
`official-doc` — Spring Boot Javadoc API 레퍼런스 (Spring Boot 4.1.0, `docs.spring.io` 호스팅).
|
||
|
||
## Parent / 활용 branch
|
||
|
||
| Branch | 이 자료가 정당화하는 결정 |
|
||
|---|---|
|
||
| [[raw/branch-notes/feature-keycloak-bff-csrf-samesite-defense]] | D3 — `server.servlet.session.cookie.same-site` 프로퍼티가 바인딩하는 `Cookie.SameSite` enum 의 실제 허용값(`OMITTED`/`NONE`/`LAX`/`STRICT`)과 각 값의 의미를 정의. `[[raw/official-docs/spring-boot-session-cookie-samesite-property-official]]` (application-properties 부록 페이지)가 이 값들을 열거하지 않아 남긴 L0→L1 갭을 메움 — D3 에서 선택한 `lax` 문자열이 실제로 어떤 enum 상수·동작에 대응하는지의 근거. |
|
||
|
||
## 출처
|
||
|
||
- 원본 URL: https://docs.spring.io/spring-boot/api/java/org/springframework/boot/web/server/Cookie.SameSite.html
|
||
- 아카이브 URL: (미확보)
|
||
- 저자 / 조직: Spring Boot 프로젝트 (Javadoc `@author`: Phillip Webb, Andy Wilkinson, Brian Clozel, Weix Sun)
|
||
- 발행일: 불명(Javadoc 생성 시점, `Since: 2.6.0`부터 존재하는 API — 페이지 자체는 최신 문서 빌드 시점 자동 생성)
|
||
- 확인된 문서 버전: **Spring Boot 4.1.0 API** (페이지 `<title>` 배너 — "current" 경로가 가리키는 최신 버전이며, branch 가 실제 채택한 Spring Boot 버전과 별도 확인 필요할 수 있음)
|
||
- 마지막 확인일: 2026-07-25
|
||
|
||
## 왜 저장했는지
|
||
|
||
`raw/official-docs/spring-boot-session-cookie-samesite-property-official` (application-properties 부록)는 `server.servlet.session.cookie.same-site` 프로퍼티의 존재만 문서화하고 **허용값을 열거하지 않는 L0→L1 갭**이 있었다. 이 Javadoc 페이지는 그 프로퍼티가 바인딩하는 `Cookie.SameSite` enum 의 상수 4개(`OMITTED`/`NONE`/`LAX`/`STRICT`)와 각각의 정확한 의미를 원문으로 정의하므로, D3(`SameSite=Lax` 선택)가 실제로 무엇을 선택한 것인지 문자 그대로 뒷받침한다.
|
||
|
||
## 핵심 인용
|
||
|
||
> [Class-level description, line 102] "SameSite values."
|
||
|
||
> [Enum Constant Detail — OMITTED, line 199] "SameSite attribute will be omitted when creating the cookie."
|
||
|
||
> [Enum Constant Detail — NONE, lines 208–209] "SameSite attribute will be set to None. Cookies are sent in both first-party
|
||
and cross-origin requests."
|
||
|
||
> [Enum Constant Detail — LAX, lines 218–219] "SameSite attribute will be set to Lax. Cookies are sent in a first-party
|
||
context, also when following a link to the origin site."
|
||
|
||
> [Enum Constant Detail — STRICT, lines 228–229] "SameSite attribute will be set to Strict. Cookies are only sent in a
|
||
first-party context (i.e. not when following a link to the origin site)."
|
||
|
||
## Claims Extracted / 추출된 주장
|
||
|
||
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|
||
|---|---|---|---|---|---|
|
||
| SPRINGBOOT-COOKIE-SAMESITE-ENUM-C1 | `org.springframework.boot.web.server.Cookie.SameSite` 는 "SameSite values"(쿠키의 SameSite 속성 값)를 나타내는 enum class 이며, 정확히 4개의 상수(`OMITTED`, `NONE`, `LAX`, `STRICT`)로 구성된다 (`Since: 2.6.0`). | [class-level, line 102] "SameSite values." + Enum Constant Summary 4-row table (lines 130–145: `LAX`/`NONE`/`OMITTED`/`STRICT`) | `official-vendor-doc` | Spring Boot 가 쿠키의 SameSite 속성을 표현하는 Java enum 의 리터럴 허용 상수 집합 | 이 enum 이 `server.servlet.session.cookie.same-site` 프로퍼티의 문자열(`lax`/`strict`/`none`)과 어떻게 바인딩되는지(대소문자 처리, `OMITTED`에 대응하는 프로퍼티 문자열 존재 여부)는 이 페이지에 명시되지 않음 |
|
||
| SPRINGBOOT-COOKIE-SAMESITE-ENUM-C2 | `OMITTED` 상수는 "쿠키 생성 시 SameSite 속성 자체를 생략한다"는 의미다. | [OMITTED detail, line 199] "SameSite attribute will be omitted when creating the cookie." | `official-vendor-doc` | SameSite 헤더 속성을 아예 붙이지 않는 explicit opt-out 동작 정의 | 이 상수가 실제 어떤 상황에서 기본값으로 쓰이는지(예: 미설정 시 기본값이 `OMITTED`인지)는 이 페이지에서 확인 불가 |
|
||
| SPRINGBOOT-COOKIE-SAMESITE-ENUM-C3 | `NONE` 상수는 SameSite 를 `None` 으로 설정하며, "쿠키가 first-party 요청과 cross-origin 요청 모두에서 전송된다"고 정의한다. | [NONE detail, lines 208–209] "SameSite attribute will be set to None. Cookies are sent in both first-party and cross-origin requests." | `official-vendor-doc` | `None` 값의 전송 범위(모든 컨텍스트) 정의 | `Secure` 속성 강제 여부·브라우저별 `None`+미-`Secure` 거부 동작은 이 페이지가 다루지 않음(그 근거는 별도 official-doc — MDN/RFC 6265bis 쪽) |
|
||
| SPRINGBOOT-COOKIE-SAMESITE-ENUM-C4 | `LAX` 상수는 SameSite 를 `Lax` 로 설정하며, "쿠키가 first-party 컨텍스트에서, 그리고 origin site 로 이어지는 링크를 따라갈 때도 전송된다"고 정의한다. | [LAX detail, lines 218–219] "SameSite attribute will be set to Lax. Cookies are sent in a first-party context, also when following a link to the origin site." | `official-vendor-doc` | `Lax` 값이 same-site 요청 + "링크를 따라가는" cross-site top-level navigation 에서 쿠키를 전송함을 정의 — D3 의 Keycloak redirect 콜백 호환성 판단의 문언 근거 | 이 문장이 "링크를 따라가는" 것을 GET 요청으로 한정한다고 명시하지 않음 — top-level POST(`form_post`) 콜백이 이 범주에 포함되는지는 이 페이지 문언만으로 확정 불가(그 경계는 `RFC6265BIS-SAMESITE-C5` 가 별도로 규정) |
|
||
| SPRINGBOOT-COOKIE-SAMESITE-ENUM-C5 | `STRICT` 상수는 SameSite 를 `Strict` 로 설정하며, "쿠키가 first-party 컨텍스트에서만 전송되며(즉 origin site 로 이어지는 링크를 따라갈 때는 전송되지 않음)"이라고 정의한다. | [STRICT detail, lines 228–229] "SameSite attribute will be set to Strict. Cookies are only sent in a first-party context (i.e. not when following a link to the origin site)." | `official-vendor-doc` | `Strict` 값이 cross-site top-level navigation(링크 클릭 포함)에서도 쿠키를 배제함을 정의 — D3 에서 `Strict` 를 기각한 근거(Keycloak 콜백 미전송 위험)의 문언 뒷받침 | 이 문장만으로 "이 동작이 모든 브라우저에서 동일하게 구현된다"는 보장은 없음(브라우저 구현 세부는 이 페이지 범위 밖) |
|
||
|
||
### Strength 허용값
|
||
|
||
- `official-standard` — RFC, 표준 사양, 언어/프로토콜 표준
|
||
- `official-vendor-doc` — Spring, Keycloak, AWS, Google 등 공식 벤더 문서 (본 문서 전 claim 해당)
|
||
- `official-reference` — 공식 reference/API 문서
|
||
- `company-case-study` — 대기업/실무 기술 블로그의 특정 사례
|
||
- `engineering-blog` — 개인/팀 블로그의 엔지니어링 해설
|
||
- `tutorial` — 튜토리얼/가이드. 일반화 금지
|
||
- `needs-confirmation` — 원문만으로는 적용 판단 불가
|
||
|
||
## Usage Boundaries / 적용 경계
|
||
|
||
- 이 자료가 직접 증명하는 것:
|
||
- `SPRINGBOOT-COOKIE-SAMESITE-ENUM-C1`: `Cookie.SameSite` enum 이 정확히 4개 상수(`OMITTED`/`NONE`/`LAX`/`STRICT`)로 구성됨.
|
||
- `C2`~`C5`: 각 상수의 Spring Boot 공식 문언 정의(어떤 컨텍스트에서 쿠키가 전송/생략되는지).
|
||
- 이 자료가 증명하지 않는 것:
|
||
- `server.servlet.session.cookie.same-site` 프로퍼티의 문자열 값(`lax`/`strict`/`none`)이 이 enum 상수로 어떻게 매핑되는지(대소문자·바인딩 메커니즘) — 이 페이지엔 프로퍼티 이름 자체가 등장하지 않음.
|
||
- 프로퍼티 미설정 시 기본값(default) — 이 페이지는 enum 정의 문서일 뿐 기본값을 선언하지 않음(sibling 문서 `spring-boot-session-cookie-samesite-property-official` 도 동일 갭이 있다고 기록됨 — 두 문서 모두 기본값 미확보).
|
||
- Spring Session(Redis 등) 구현체가 이 프로퍼티를 실제로 존중하는지 — branch-note 의 open risk (3)은 이 페이지로 해소되지 않음.
|
||
- "링크를 따라갈 때"(LAX 상수 설명)가 GET 만을 의미하는지 POST `form_post` 콜백까지 포함하는지 — RFC 6265bis 쪽 근거(`RFC6265BIS-SAMESITE-C5`)로 보완 필요.
|
||
- 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
|
||
- AP3 Keycloak client 의 실제 `response_mode` (GET redirect vs `form_post`) 확인 후에만 D3 의 `Lax` 선택이 실제로 안전한지 최종 확정 가능(branch-note 이미 명시된 open risk).
|
||
|
||
## 메모
|
||
|
||
- 이 Javadoc 페이지는 `server.servlet.session.cookie.same-site` 프로퍼티 이름을 직접 언급하지 않는다 — "이 enum 이 그 프로퍼티가 바인딩하는 타입"이라는 연결은 Spring Boot 패키지 구조(`org.springframework.boot.web.server.Cookie.SameSite`)와 sibling 문서(`spring-boot-session-cookie-samesite-property-official`)의 프로퍼티 설명을 통한 추론이며, 이 페이지 자체가 그 바인딩을 선언하지 않는다는 점을 Usage Boundaries에 명시함.
|
||
- 페이지 버전 배너가 "Spring Boot 4.1.0 API"로 표시됨 — `docs.spring.io/spring-boot/api/java/...` 경로는 버전 미고정("current") 경로일 가능성이 있어, branch 가 실제 사용하는 Spring Boot 버전과 다를 수 있음. 필요 시 버전 고정 경로(`docs.spring.io/spring-boot/docs/<version>/api/...`)로 재확인 권장.
|
||
- `attributeValue()` 메서드는 `@Nullable String` 을 반환한다고만 되어 있고 별도 설명(`<div class="block">`)이 없음 — 인용 대상에서 제외.
|
||
|
||
## 관련
|
||
|
||
- 같은 주제 다른 official-doc:
|
||
- `[[raw/official-docs/spring-boot-session-cookie-samesite-property-official]]` — `server.servlet.session.cookie.same-site` 프로퍼티 존재 자체의 근거(허용값 미열거 갭의 원본)
|
||
- `[[raw/official-docs/rfc6265bis-samesite-attribute-ietf]]` — SameSite 속성의 표준(IETF Internet-Draft) 정의, `Lax`/top-level POST 콜백 경계
|
||
- `[[raw/official-docs/samesite-set-cookie-mdn-official]]` — MDN 서술
|
||
- `[[raw/official-docs/csrf-prevention-cheat-sheet-owasp-samesite-official]]` — OWASP defense-in-depth 프레이밍
|
||
- 이 자료를 인용한 wiki 요약: (아직 생성 안 됨)
|