167 lines
4.6 KiB
Markdown
167 lines
4.6 KiB
Markdown
---
|
|
title: branch / feature-keycloak-bff-csrf-samesite-defense
|
|
source_type: branch-note
|
|
status: raw
|
|
id: BR-KEYCLOAK-PATTERNS-OVERVIEW-011
|
|
kind: project-work-item
|
|
project: keycloak-patterns-overview
|
|
work_item: WI-KEYCLOAK-PATTERNS-OVERVIEW-011
|
|
inherits: [DEC-KEYCLOAK-PATTERNS-OVERVIEW-ACCEPTANCE-001@1, DEC-KEYCLOAK-PATTERNS-OVERVIEW-BFF-SESSION-001@1]
|
|
refines: []
|
|
overrides: []
|
|
depends_on: [WI-KEYCLOAK-PATTERNS-OVERVIEW-010]
|
|
imports: []
|
|
delegates: []
|
|
accepts_delegations: []
|
|
contract_packet: 1
|
|
contract_packet_sha256: 00ce3ab254b077628852e877be348df58e6c0d84b03466a875ecc7a3c4023e11
|
|
branch: feature-keycloak-bff-csrf-samesite-defense
|
|
parent_branch:
|
|
related_projects: [keycloak-patterns-overview]
|
|
tags: [branch]
|
|
created: 2026-07-23
|
|
target_merge:
|
|
status_label: in-progress
|
|
---
|
|
|
|
# branch: feature-keycloak-bff-csrf-samesite-defense
|
|
|
|
<!-- section-id: branch-parent -->
|
|
## 부모 (필수)
|
|
|
|
- [[raw/project-notes/keycloak-patterns-overview]]
|
|
|
|
<!-- GENERATED: branch-contract:start -->
|
|
<!-- section-id: branch-contract-packet -->
|
|
## 브랜치 계약 패킷
|
|
|
|
- **생성 시 프로젝트 개정**: `1`
|
|
- **패킷 스키마**: `contract_packet: 1`
|
|
- **완료 조건**: CSRF를 재현하고 SameSite와 CSRF token 적용 후 403을 검증한다
|
|
|
|
<!-- section-id: inherited-project-decisions -->
|
|
### 상속한 프로젝트 결정
|
|
|
|
| Decision Ref | Project Summary | Branch Application | Source |
|
|
|---|---|---|---|
|
|
| `DEC-KEYCLOAK-PATTERNS-OVERVIEW-ACCEPTANCE-001@1` | done-bar는 E2E success와 signature security failure 재현·해결 evidence다 | `WI-KEYCLOAK-PATTERNS-OVERVIEW-011` 완료 조건에 적용 | `[[raw/project-notes/keycloak-patterns-overview]]` |
|
|
| `DEC-KEYCLOAK-PATTERNS-OVERVIEW-BFF-SESSION-001@1` | AP3는 token을 backend session에 두고 browser에는 cookie만 둔다 | `WI-KEYCLOAK-PATTERNS-OVERVIEW-011` 완료 조건에 적용 | `[[raw/project-notes/keycloak-patterns-overview]]` |
|
|
|
|
<!-- section-id: branch-local-decisions -->
|
|
### 브랜치 지역 결정
|
|
|
|
| Decision ID | Decision | Relation | Supporting Claims | Status |
|
|
|---|---|---|---|---|
|
|
|
|
<!-- section-id: declared-overrides -->
|
|
### 선언한 예외
|
|
|
|
| Override ID | Overrides | Reason | Approval | Status |
|
|
|---|---|---|---|---|
|
|
<!-- GENERATED: branch-contract:end -->
|
|
|
|
<!-- GENERATED: artifact-imports:start -->
|
|
### 가져온 artifact 계약
|
|
|
|
| Artifact Ref | Owner | Producer | Schema Ref |
|
|
|---|---|---|---|
|
|
<!-- GENERATED: artifact-imports:end -->
|
|
|
|
<!-- GENERATED: project-contract-imports:start -->
|
|
## 가져온 프로젝트 계약
|
|
|
|
| Ref | Owner | 요약 | Branch 적용 |
|
|
|---|---|---|---|
|
|
<!-- GENERATED: project-contract-imports:end -->
|
|
|
|
<!-- GENERATED: received-delegations:start -->
|
|
### 수신한 위임
|
|
|
|
| Delegation Ref | From | Concern | Status |
|
|
|---|---|---|---|
|
|
<!-- GENERATED: received-delegations:end -->
|
|
|
|
<!-- GENERATED: flow:start -->
|
|
### 가져온 흐름 단계
|
|
|
|
| Stage Ref | Order | Owner | Input | Action | Output |
|
|
|---|---:|---|---|---|---|
|
|
<!-- GENERATED: flow:end -->
|
|
|
|
<!-- section-id: branch-goal -->
|
|
## 목표
|
|
|
|
- `WI-KEYCLOAK-PATTERNS-OVERVIEW-011`의 완료 조건을 구현한다: CSRF를 재현하고 SameSite와 CSRF token 적용 후 403을 검증한다
|
|
|
|
<!-- section-id: branch-scope -->
|
|
## 범위
|
|
|
|
### 포함 범위
|
|
|
|
- Work Item 완료 조건
|
|
|
|
### 제외 범위
|
|
|
|
- project decision registry 변경
|
|
|
|
## 근거 (필수, 최소 1개+)
|
|
|
|
외부 근거 미등록. `/branch-spec feature-keycloak-bff-csrf-samesite-defense` 단계에서 source claim을 연결한다.
|
|
|
|
## TODO
|
|
|
|
- [ ] CSRF를 재현하고 SameSite와 CSRF token 적용 후 403을 검증한다 — 등급: `planned`
|
|
|
|
## 진행 중 메모
|
|
|
|
아직 없음.
|
|
|
|
## 결정 사항
|
|
|
|
project 결정 외 branch-local 결정은 아직 없음.
|
|
|
|
<!-- section-id: decision-evidence -->
|
|
## 결정-근거 매핑
|
|
|
|
| Decision ID | Decision | 선택 조건 (언제 이 결정 / 언제 대안) | Supporting Claims | Evidence Strength | Open Risk |
|
|
|---|---|---|---|---|---|
|
|
|
|
<!-- section-id: implementation -->
|
|
## 구현 가이드
|
|
|
|
`/branch-spec` 단계에서 source claim 기반으로 작성한다.
|
|
|
|
<!-- section-id: edge-failure-dependency -->
|
|
## 엣지·실패·의존
|
|
|
|
- **실패·엣지 경로**: `/branch-spec` 단계에서 구체화한다.
|
|
- **다른 계약 의존**: `WI-KEYCLOAK-PATTERNS-OVERVIEW-010`
|
|
|
|
<!-- section-id: claims-to-verify -->
|
|
## 검증해야 할 주장
|
|
|
|
| Claim | Why uncertain | How to verify | Status |
|
|
|---|---|---|---|
|
|
|
|
## 관심사 커버리지 (coverage-auditor 자동 생성 — 있을 때)
|
|
|
|
`/coverage` 실행 전.
|
|
|
|
## 마주친 문제
|
|
|
|
아직 없음.
|
|
|
|
## 묶음 (이 branch에서 파생된 자료)
|
|
|
|
<!-- GENERATED: branches:start -->
|
|
<!-- GENERATED: branches:end -->
|
|
|
|
## 관련 일일 노트
|
|
|
|
해당 없음.
|
|
|
|
## 완료 후 정리
|
|
|
|
- PR 링크:
|
|
- 리뷰 메모:
|