Files
keycloak-pattern/docs/bff-vs-spa-direct.md
T

1.3 KiB

BFF vs SPA direct

항목 SPA direct (AP1) BFF (AP3)
OAuth client public + PKCE confidential + server secret
token holder browser JavaScript memory BFF server
browser credential access/refresh token HttpOnly session cookie
XSS 영향 실행 중 token/API 권한 탈취 가능 cookie 읽기는 막지만 same-origin 요청 악용 가능
CSRF bearer header 중심이라 상대적으로 작음 session cookie이므로 명시적 방어 필요
backend 상태 stateless 가능 session store 필요
logout/revocation browser와 Keycloak 조정 BFF session과 Keycloak logout 조정
scale-out JWT 검증 위주 sticky session 또는 shared store

이 repository의 AP3는 Spring oauth2Login, confidential bff-confidential client, server-side authorized-client/token 보관, HttpOnly/SameSite session, CSRF token을 실제 구현한다. AP1은 token을 메모리에만 두지만 XSS가 실행되면 현재 token을 사용할 수 있다는 경계를 E2E로 보여 준다.

선택은 “BFF가 항상 더 안전하다”가 아니라 threat model과 운영비의 교환이다. 브라우저에 OAuth token을 노출하지 않는 것이 우선이고 stateful 운영을 감당할 수 있으면 BFF, protocol과 stateless Resource Server를 직접 학습하려면 AP1이 더 투명하다.