Files
technical-visualization-haness/.work/keycloak-four-patterns/final/assets/ap3-csrf-boundary/ap3-csrf-boundary.alt.md
T
2026-07-29 18:03:21 +09:00

2.1 KiB
Raw Blame History

AP3의 masked CSRF 응답과 raw POST credential

Alternative text

BFF CSRF endpoint가 raw XSRF cookie와 masked JSON token으로 분기하고, SPA가 raw cookie만 실제 POST header 값으로 사용해 Spring CSRF filter에 제출하는 데이터 흐름.

Long description

왼쪽의 BFF CSRF endpoint에서 두 결과가 갈라진다. XSRF-TOKEN cookie에는 raw token이 저장되고 JSON body에는 XOR와 Base64로 masked된 token 및 headerName이 담긴다. 두 결과는 SPA의 POST 조립 단계로 모이지만, JSON에서는 headerName만 사용하고 실제 X-XSRF-TOKEN 값은 document.cookie에서 읽은 raw token이다. POST에는 같은 raw 값을 가진 cookie와 header가 함께 도달하고 Spring CSRF filter가 일치 여부를 확인한다.

Elements and evidence

  • BFF · /bff/csrf (service): CookieCsrfTokenRepository와 CsrfController를 통해 raw cookie와 masked JSON 응답을 만드는 endpoint. Evidence: L819L844.
  • Browser cookie · raw (credential): Cookie repository가 path /에 설정하며 SPA가 document.cookie로 읽는 raw CSRF token. Evidence: L827L834, L844L856.
  • JSON body · masked (data): Request attribute용 token을 masked한 JSON 표현으로, SPA는 token 값이 아니라 headerName만 사용한다. Evidence: L836L846.
  • SPA POST 조립 (component): Raw cookie 값을 X-XSRF-TOKEN header에 넣어 preference POST를 만드는 browser code. Evidence: L846L856, L862L870.
  • Spring CSRF filter (security): Repository의 expected raw token과 submitted raw header를 controller 실행 전에 비교하는 방어선. Evidence: L854L854, L873L873, L897L904.

Relationships

  • SPA POST 조립 → Spring CSRF filter: Cookie raw = Header raw. Evidence: L848L873.
  • BFF · /bff/csrf → JSON body · masked: masked JSON. Evidence: L836L844.
  • BFF · /bff/csrf → Browser cookie · raw: Set-Cookie · raw. Evidence: L827L834.
  • JSON body · masked → SPA POST 조립: headerName only. Evidence: L846L856.
  • Browser cookie · raw → SPA POST 조립: document.cookie · raw. Evidence: L846L856.