decision · wiki/decision-chemical-auth-bff.md
Decision — chemical auth via BFF
브라우저 인증·API 진입 정본은 **BFF 세션(`sid`) + JWT Redis 보관 + Next `/api/*`→BFF rewrite** 이다. HANDOFF 식 “Next가 MS로 직접 rewrite”는 **구형/요약 오류**로 취급한다.
corpusprojectlayerjudgmenttypedecisiondomainbackendsprojectchemicalstatusactiveupdated2026-07-18originowned
Decision — chemical auth via BFF
한 줄: 브라우저 인증·API 진입 정본은 BFF 세션(sid) + JWT Redis 보관 + Next /api/*→BFF rewrite 이다. HANDOFF 식 “Next가 MS로 직접 rewrite”는 구형/요약 오류로 취급한다.
결정
- 선택한 안: BFF (services/bff, FastAPI) 가 유일한 브라우저→백엔드 게이트
- 쿠키: HttpOnly
sid(admin은admin_sid) - JWT:
bff:session:{uuid}Redis에만 존재, 브라우저 미노출 - Next: UI +
/api/:path*→BFF_URLrewrite only (output: standalone) - 포트: BFF 컨테이너 8000 / 호스트 기본 8010; compose 네트워크
http://bff:8000 - 하위 MS(gateway:8001 등)는 BFF 서비스 프록시가 Authorization 주입 후 호출
대안
| 안 | 요지 | 탈락 이유 |
|---|---|---|
| A. Next rewrites → 각 MS 직행 | HANDOFF 다이어그램 요약 | 현재 next.config 단일 BFF destination과 불일치; JWT를 FE에 두거나 쿠키 공유 복잡 |
| B. BFF 세션 게이트 | spec + 현 코드 | 채택 |
| C. 브라우저 직접 Gateway JWT | SPA 표준 | XSS에 JWT 노출, silent refresh·테넌트 경계 부담 |
근거
- brief-chemical-frontend-next-config
- brief-chemical-bff-main
- brief-chemical-bff-session
- brief-chemical-bff-cookie
- brief-chemical-compose-bff
- brief-chemical-spec — BFF 서술과 정합
- brief-chemical-handoff — 다이어그램 긴장은 아래로 해소
- concept-chemical-service-topology
문서 정합 규칙 (이후)
- wiki·온보딩에서 인증을 말할 때 이 decision을 인용
- HANDOFF raw는 불변; 구 다이어그램은 “시점 스냅샷/축약”이며 운영 정본 아님
- admin 전역 API는 admin-gateway + admin 세션 쿠키 경로를 따르되, 브라우저 진입은 여전히 BFF 경유 전제
폐기·재검토 조건
- BFF 제거 PR이 머지되고 next.config가 MS 다중 destination으로 바뀌는 실측
- 데스크톱(Tauri)이 sid 쿠키 모델과 다른 네이티브 토큰 모델을 공식 채택할 때 (별도 decision)