Skip to content

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é

  1. Isolation des credentials : Le secret AUTH_SECRET n’est jamais exposé à la couche Présentation ni au client navigateur.
  2. Cookies sécurisés : Propriétés HttpOnly; Secure; SameSite=Lax.
  3. 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)
Switch to normal mode

Contents