Auth & Session Architecture
Arsitektur autentikasi ganda: Firebase Client ID Token dan Server-Side HttpOnly Session Cookies.
Status: Stablev1.0.0Source Verified: Yes
Source:
src/context/AuthContext.tsx, src/lib/serverAuth.ts, src/app/api/auth/session/route.tsTests: tests/unit/authPolicy.test.ts, tests/routes/dashboardAuthorization.route.test.tsAuthentication & Session Architecture#
OrthoBreath menerapkan pola pertukaran token ganda (Dual-Token Exchange Pattern) untuk memadukan kemudahan Firebase Authentication di sisi client dengan keamanan server-side session cookies di sisi API.
1. Alur Pertukaran Token Sesi#
Diagram Arsitektur / Alur Data
Merender diagram alur terstruktur...
2. Atribut Keamanan Cookie Sesi#
| Atribut Cookie | Nilai | Tujuan Keamanan |
|---|---|---|
| Name | __session | Sesuai standar hosting Vercel & Firebase Serverless |
| HttpOnly | true | Mencegah pembacaan token melalui serangan XSS JavaScript |
| Secure | true (di Production) | Memastikan cookie hanya dikirim melalui koneksi HTTPS |
| SameSite | Lax | Melindungi dari serangan Cross-Site Request Forgery (CSRF) |
| Max-Age | 432.000 detik (5 hari) | Masa berlaku sesi aktif terukur |
| Path | / | Berlaku di seluruh lingkup rute portal |
3. Mekanisme Revokasi & Expiry Sesi#
Saat pengguna melakukan logout atau izin staf dicabut oleh administrator: 1. Endpoint POST /api/auth/logout memanggil revokeRefreshTokens(uid) pada Firebase Admin SDK. 2. Server mengirim header Set-Cookie: __session=; Max-Age=0 untuk menghapus cookie di browser. 3. Seluruh request berikutnya yang membawa cookie lama akan ditolak dengan status 401 Unauthorized.