ADR 0004 – Sécurité en modèle BFF avec OIDC
ADR 0004 – Sécurité en modèle BFF avec OIDC
Contexte
L’application est exposée sur internet et contient des documents personnels. Le front est une SPA Angular servie par le même backend.
Décision
- Spring Boot est le client OIDC (
oauth2Login, enregistrement nomméoidc, fournisseur Authentik ou Keycloak). Les jetons restent côté serveur ; le navigateur n’a qu’un cookie de session. /api/**répond 401 (pas de redirection) ; le front redirige vers/oauth2/authorization/oidc.- CSRF par cookie
XSRF-TOKENlisible par JavaScript et en-têteX-XSRF-TOKEN, géré nativement par Angular. - Front et API sur la même origine (front embarqué dans le jar) : pas de CORS.
- Profil
dev: sécurité désactivée, uniquement pour le développement local.
Alternatives écartées
- Jetons dans le navigateur (
angular-oauth2-oidc, stockage local) : exposition aux XSS, rafraîchissement plus complexe.
Conséquences
- Les jetons d’API pour scripts (jalon 3) seront une seconde chaîne de filtres, en Bearer, limitée à
/api/**. - Le reverse proxy (Caddy) termine le TLS ; configurer les en-têtes
X-Forwarded-*(server.forward-headers-strategy=framework) au déploiement.
Amendement (ADR 0012, fichiers)
X-Frame-Options passe de DENY (défaut de Spring Security) à SAMEORIGIN dans les deux chaînes de filtres (dev et oidc), pour que l’aperçu PDF d’un fichier s’affiche dans un <iframe> de la même origine. Une autre origine ne peut toujours pas intégrer l’application. Les fichiers servis portent en plus leur propre Content-Security-Policy (frame-ancestors 'self').