Auth Handler Worker
Auth Handler Worker
Documentation technique
Type de ressource : Cloudflare Worker (Microservice FaaS d’Authentification)
Fichier source :services/auth-handler/src/index.ts
Statut : Proposé / DOC
1. Vue d’ensemble
1.1. Description
Worker Cloudflare L3 dédié à la gestion de l’authentification et du contrôle de session pour les documents et ressources réservés du site (ex: spécifications et guides privés de la documentation Starlight).
1.2. Objectif
- Vérifier les identifiants utilisateur (login/password).
- Émettre et valider des cookies HTTP-Only de session (
auth_session). - Gérer la persistance et l’invalidation instantanée des sessions via Cloudflare Workers KV (
AUTH_SESSIONS_KV). - Permettre une interconnexion haute performance avec Astro (
apps/web) via Cloudflare Service Binding.
1.3. Caractéristiques
| Propriété | Valeur |
|---|---|
| Type | Microservice d’authentification L3 |
| Trigger | HTTP fetch & Service Binding |
| Routes publiques | /api/auth/login, /api/auth/logout, /api/auth/verify, /health |
| Environnements | Development, Production |
| Consommateurs | Astro SSR Middleware (apps/web) |
2. Architecture et flux
[Astro SSR Middleware (L2)] │ ├── Service Binding (AUTH_HANDLER) en prod └── HTTP fetch (http://localhost:8790) en dev │ ▼[Auth Handler Worker (L3)] │ ├── /api/auth/login --> Validation identifiants, création session dans KV, positionnement cookie ├── /api/auth/verify --> Lecture cookie `auth_session`, vérification dans KV, retour données user └── /api/auth/logout --> Invalidation session dans KV, suppression cookie │ ▼[Workers KV : AUTH_SESSIONS_KV]3. Configuration
3.1. Variables d’environnement & Secrets
| Variable / Secret | Type | Description |
|---|---|---|
ENVIRONMENT |
Var | Environnement (dev / production) |
AUTH_SECRET |
Secret | Secret HMAC pour la signature et le chiffrement du jeton |
3.2. Bindings Cloudflare
| Binding | Type | Description |
|---|---|---|
AUTH_SESSIONS_KV |
KV Namespace | Stockage KV des jetons et sessions actives |
3.3. Configuration Wrangler (services/auth-handler/wrangler.toml)
name = "amn-auth-handler"main = "src/index.ts"compatibility_date = "2025-07-18"compatibility_flags = ["nodejs_compat"]
[vars]ENVIRONMENT = "dev"
[[kv_namespaces]]binding = "AUTH_SESSIONS_KV"id = "auth-sessions-kv-id"
[env.dev]name = "amn-auth-handler-dev"vars = { ENVIRONMENT = "dev" }
[env.prod]name = "amn-auth-handler-prod"vars = { ENVIRONMENT = "prod" }4. Implémentation (Architecture de code)1/2
4. Implémentation (Architecture de code)2/2
import { z } from 'zod';
const LoginSchema = z.object({ email: z.string().email(), password: z.string().min(6),});
export interface Env { AUTH_SESSIONS_KV: KVNamespace; AUTH_SECRET: string; ENVIRONMENT: string;}
export default { async fetch(request: Request, env: Env): Promise<Response> { const url = new URL(request.url);
if (request.method === 'POST' && url.pathname === '/api/auth/login') { return handleLogin(request, env); } if (request.method === 'POST' && url.pathname === '/api/auth/logout') { return handleLogout(request, env); } if ((request.method === 'GET' || request.method === 'POST') && url.pathname === '/api/auth/verify') { return handleVerify(request, env); } if (request.method === 'GET' && url.pathname === '/health') { return new Response(JSON.stringify({ status: 'healthy', environment: env.ENVIRONMENT }), { headers: { 'Content-Type': 'application/json' }, }); }
return new Response('Not Found', { status: 404 }); }};5. Sécurité
- Isolation des credentials : Le secret
AUTH_SECRETn’est jamais exposé à la couche Présentation ni au client navigateur. - Cookies sécurisés : Propriétés
HttpOnly; Secure; SameSite=Lax. - KV Revocation : Déconnexion effective immédiatement sur toutes les instances de bordure.
6. Historique des modifications
| Date | Version | Description | Auteur |
|---|---|---|---|
| 2026-09-24 | 1.0 | Création initiale ObjectData Auth Handler Worker | Team (Agent) |