Second Brain documentation

ADR 0004 – Sécurité en modèle BFF avec OIDC

← Toutes les décisions

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-TOKEN lisible par JavaScript et en-tête X-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').