Implémente la Story 1.4 du système d'authentification avec plusieurs couches de protection contre les attaques par force brute. Sécurité backend : - Authentification JWT avec access token (15min) + refresh token (7j) - Rotation automatique des refresh tokens avec détection de replay - Rate limiting progressif par IP (délai Fibonacci après échecs) - Intégration Cloudflare Turnstile CAPTCHA après 5 tentatives - Alerte email à l'utilisateur après blocage temporaire - Isolation multi-tenant (un utilisateur ne peut se connecter que sur son établissement) Frontend : - Page de connexion avec feedback visuel des délais et erreurs - Composant TurnstileCaptcha réutilisable - Gestion d'état auth avec stockage sécurisé des tokens - Tests E2E Playwright pour login, tenant isolation, et activation Infrastructure : - Configuration Symfony Security avec json_login + jwt - Cache pools séparés (filesystem en test, Redis en prod) - NullLoginRateLimiter pour environnement de test (évite blocage CI) - Génération des clés JWT en CI après démarrage du backend
64 lines
1.8 KiB
YAML
64 lines
1.8 KiB
YAML
monolog:
|
|
channels:
|
|
- deprecation
|
|
- security
|
|
- audit
|
|
|
|
when@dev:
|
|
monolog:
|
|
handlers:
|
|
main:
|
|
type: stream
|
|
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
|
level: debug
|
|
channels: ["!event"]
|
|
formatter: monolog.formatter.json
|
|
console:
|
|
type: console
|
|
process_psr_3_messages: false
|
|
channels: ["!event", "!doctrine", "!console"]
|
|
|
|
when@test:
|
|
monolog:
|
|
handlers:
|
|
main:
|
|
type: fingers_crossed
|
|
action_level: error
|
|
handler: nested
|
|
excluded_http_codes: [404, 405]
|
|
channels: ["!event"]
|
|
nested:
|
|
type: stream
|
|
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
|
level: debug
|
|
|
|
when@prod:
|
|
monolog:
|
|
handlers:
|
|
main:
|
|
type: fingers_crossed
|
|
action_level: error
|
|
handler: nested
|
|
excluded_http_codes: [404, 405]
|
|
buffer_size: 50
|
|
nested:
|
|
type: stream
|
|
path: php://stderr
|
|
level: debug
|
|
formatter: monolog.formatter.json
|
|
console:
|
|
type: console
|
|
process_psr_3_messages: false
|
|
channels: ["!event", "!doctrine"]
|
|
deprecation:
|
|
type: stream
|
|
channels: [deprecation]
|
|
path: php://stderr
|
|
formatter: monolog.formatter.json
|
|
audit:
|
|
type: stream
|
|
channels: [audit]
|
|
path: "%kernel.logs_dir%/audit.log"
|
|
level: info
|
|
formatter: monolog.formatter.json
|