feat: Connexion utilisateur avec sécurité renforcée
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
This commit is contained in:
20
.github/workflows/ci.yml
vendored
20
.github/workflows/ci.yml
vendored
@@ -173,10 +173,9 @@ jobs:
|
||||
docker compose build php
|
||||
# Start services (includes db, redis, rabbitmq dependencies)
|
||||
# Use null mailer transport since mailpit is not available in CI
|
||||
docker compose up -d php
|
||||
# Use test environment to disable rate limiting for E2E tests
|
||||
APP_ENV=test MAILER_DSN="null://null" docker compose up -d php
|
||||
timeout-minutes: 10
|
||||
env:
|
||||
MAILER_DSN: "null://null"
|
||||
|
||||
- name: Wait for backend to be ready
|
||||
run: |
|
||||
@@ -189,10 +188,25 @@ jobs:
|
||||
done'
|
||||
echo "Backend is ready!"
|
||||
|
||||
- name: Generate JWT keys for authentication
|
||||
run: |
|
||||
# Generate JWT keys if they don't exist (required for login/token endpoints)
|
||||
docker compose exec -T php php bin/console lexik:jwt:generate-keypair --skip-if-exists
|
||||
|
||||
- name: Show backend logs on failure
|
||||
if: failure()
|
||||
run: docker compose logs php
|
||||
|
||||
- name: Configure hosts for multi-tenant testing
|
||||
run: |
|
||||
echo "127.0.0.1 classeo.local" | sudo tee -a /etc/hosts
|
||||
echo "127.0.0.1 ecole-alpha.classeo.local" | sudo tee -a /etc/hosts
|
||||
echo "127.0.0.1 ecole-beta.classeo.local" | sudo tee -a /etc/hosts
|
||||
cat /etc/hosts
|
||||
|
||||
- name: Reset rate limiter before E2E tests
|
||||
run: docker compose exec -T php php bin/console app:dev:reset-rate-limit
|
||||
|
||||
- name: Run E2E tests
|
||||
working-directory: frontend
|
||||
run: pnpm run test:e2e
|
||||
|
||||
Reference in New Issue
Block a user