{ "project": "keycloak", "ssot": "final/document.md", "generatedAt": "2026-09-04", "note": "글감 목록이다. file 이 있으면 이미 쓴 기록이고, 없으면 아직 쓰지 않은 글감이다.", "topics": { "oauth-oidc-auth-boundary": { "topic": "oauth-oidc-auth-boundary", "kinds": { "case": [ { "title": "Refresh Token 관리만 서버로 이전, Access Token은 여전히 Browser에 노출", "slug": "split-custody-access-token", "file": "oauth-oidc-auth-boundary/case/case-ap2-split-custody.md", "status": "게시 중", "studioId": "488ce49b-afa4-42a5-a2ce-de2e0653cd82", "assets": 1, "evidence": 0 }, { "title": "BFF에서 Browser Token을 제거하고 Session과 CSRF를 처리한 방식", "slug": "bff-session-csrf-responsibility", "file": "oauth-oidc-auth-boundary/case/case-ap3-bff-session-csrf.md", "status": "게시 중", "studioId": "d85bd6af-7599-4ef7-9407-6609927d5b5c", "assets": 2, "evidence": 0 }, { "title": "Forward-Auth에서 Client가 보낸 Identity Header를 신뢰하면 안 되는 이유", "slug": "identity-header-trust", "file": "oauth-oidc-auth-boundary/case/case-ap4-identity-header-trust.md", "status": "게시 중", "studioId": "a0e1cc05-92b3-4dac-bce1-513ab8cd862b", "assets": 1, "evidence": 0 }, { "title": "SPA에서 OAuth Token을 JavaScript Memory에 보관한 경우", "slug": "spa-browser-credential-boundary", "file": "oauth-oidc-auth-boundary/case/case-browser-credential-boundary.md", "status": "게시 중", "studioId": "bf675775-4f3e-4744-8014-f0efff51422a", "assets": 0, "evidence": 0 } ], "concept": [ { "title": "Authorization Code와 PKCE가 보호하는 구간", "slug": "authorization-code-and-pkce", "file": "oauth-oidc-auth-boundary/concept/concept-authorization-code-and-pkce.md", "status": "게시 전", "studioId": "75c6c657-3e03-47a0-a9d0-5637fce9dd3f", "assets": 0, "evidence": 0 }, { "title": "Bearer JWT가 인증된 principal이 되기까지", "slug": "bearer-jwt-validation-chain", "file": "oauth-oidc-auth-boundary/concept/concept-bearer-jwt-validation-chain.md", "status": "게시 전", "studioId": "87000d59-b69f-4010-9481-0b71c8bde32d", "assets": 0, "evidence": 0 }, { "title": "브라우저가 credential을 보관하는 위치와 그 성질", "slug": "browser-credential-storage", "file": "oauth-oidc-auth-boundary/concept/concept-browser-credential-storage.md", "status": "게시 전", "studioId": "bb5c37ae-2d94-48f7-ad4e-a37c61c3fd07", "assets": 0, "evidence": 0 }, { "title": "Cookie로 인증하는 요청에서 CSRF token이 하는 일", "slug": "cookie-auth-csrf", "file": "oauth-oidc-auth-boundary/concept/concept-cookie-auth-csrf.md", "status": "게시 전", "studioId": "5c8f12d5-1ead-469b-8e91-2de69401df48", "assets": 0, "evidence": 0 }, { "title": "Forward-Auth와 Nginx auth_request의 동작", "slug": "forward-auth-and-auth-request", "file": "oauth-oidc-auth-boundary/concept/concept-forward-auth-and-auth-request.md", "status": "게시 전", "studioId": "a3493786-d3fb-4b01-b1c5-ecb23c3d5497", "assets": 0, "evidence": 0 }, { "title": "외부 IdP Brokering의 동작", "slug": "idp-brokering", "file": "oauth-oidc-auth-boundary/concept/concept-idp-brokering.md", "status": "게시 전", "studioId": "d99fdec9-fe9e-4e0f-a50b-6fb9b9ed5719", "assets": 0, "evidence": 0 } ], "reference": [ { "title": "Authorization Code Flow의 Endpoint와 Credential 이동 기준", "slug": "authorization-code-endpoint-credential-movement", "file": "oauth-oidc-auth-boundary/reference/reference-authorization-code-endpoints.md", "status": "게시 중", "studioId": "39fdf472-82c4-43ed-abec-73de672f08ae", "assets": 0, "evidence": 0 }, { "title": "BFF 인증 구조 설계 기준", "slug": "bff-authentication-design-criteria", "file": "oauth-oidc-auth-boundary/reference/reference-bff-auth-design.md", "status": "게시 중", "studioId": "97eddd97-1096-426a-a2c6-a6c5bf1cd09f", "assets": 0, "evidence": 0 }, { "title": "Forward-Auth에서 Identity Header를 신뢰하기 위한 조건", "slug": "forward-auth-identity-header-trust", "file": "oauth-oidc-auth-boundary/reference/reference-forward-auth-header-trust.md", "status": "게시 중", "studioId": "004dd0a2-5fb3-4f25-80c9-576f709de331", "assets": 0, "evidence": 0 }, { "title": "외부 IdP 연동과 Application 인증 구조의 경계", "slug": "external-idp-federation-application-boundary", "file": "oauth-oidc-auth-boundary/reference/reference-idp-federation-boundary.md", "status": "게시 중", "studioId": "1a00a640-8987-4075-a9e4-7ec023cdffbb", "assets": 0, "evidence": 0 }, { "title": "OAuth/OIDC 인증 패턴 선택 기준", "slug": "oauth-oidc-pattern-selection-criteria", "file": "oauth-oidc-auth-boundary/reference/reference-pattern-selection.md", "status": "게시 중", "studioId": "3f886154-1b85-407b-bda4-57d28370e745", "assets": 0, "evidence": 0 }, { "title": "Public Client와 Confidential Client 구분 기준", "slug": "public-confidential-client-boundary", "file": "oauth-oidc-auth-boundary/reference/reference-public-confidential-client.md", "status": "게시 중", "studioId": "ede6b9ce-eeed-40c8-9175-9e8116029395", "assets": 0, "evidence": 0 }, { "title": "OAuth Token과 Application Session을 구분하는 기준", "slug": "oauth-token-application-session-boundary", "file": "oauth-oidc-auth-boundary/reference/reference-token-vs-session.md", "status": "게시 중", "studioId": "66c18e42-116c-459f-86bd-b7e4bf394866", "assets": 0, "evidence": 0 } ], "question": [ { "title": "BFF의 Session과 OAuth2AuthorizedClient를 어디에 저장할 것인가", "slug": "bff-session-authorized-client-store", "file": "oauth-oidc-auth-boundary/question/question-bff-state-store.md", "status": "게시 중", "studioId": "18a5cde2-dd1e-4bff-9f1c-997577ae438f", "assets": 0, "evidence": 0 }, { "title": "Forward-Auth 구조에서 Application Authorization을 어디까지 Edge에 둘 것인가", "slug": "edge-authorization-scope", "file": "oauth-oidc-auth-boundary/question/question-edge-authorization-scope.md", "status": "게시 중", "studioId": "7ff40767-a00b-4db2-98f6-0cdfce8c8936", "assets": 0, "evidence": 0 }, { "title": "서버 세션 기반 인증 구조는 다중 인스턴스에서 어떻게 운영할 것인가", "slug": "server-session-pattern-multi-instance", "file": "oauth-oidc-auth-boundary/question/question-multi-instance-session.md", "status": "게시 중", "studioId": "c72656b5-842d-45d9-b5f6-82b66b09d0b9", "assets": 0, "evidence": 0 }, { "title": "Refresh Token Rotation과 다중 Replica 경쟁을 어떻게 처리할 것인가", "slug": "refresh-rotation-replica-contention", "file": "oauth-oidc-auth-boundary/question/question-refresh-rotation-replica.md", "status": "게시 중", "studioId": "9ae4ec71-a32e-49a7-88c2-f7368541c28d", "assets": 0, "evidence": 0 } ], "decision": [ { "title": "BFF가 OAuth Token을 관리하는 조건", "slug": "bff-owns-token-when-browser-must-not", "file": "oauth-oidc-auth-boundary/decision/decision-bff-owns-token.md", "status": "게시 중", "studioId": "19b55c39-c583-4161-9775-df954280a568", "assets": 0, "evidence": 0 }, { "title": "외부 IdP와의 연동이라도 별도의 인증 방식이 아니다.", "slug": "federation-is-not-an-application-pattern", "file": "oauth-oidc-auth-boundary/decision/decision-federation-not-a-pattern.md", "status": "게시 중", "studioId": "8c1ebea7-204e-445c-9812-0421d9eb0e9c", "assets": 0, "evidence": 0 } ] } } } }