# Flux d'Authentification BTP Xpress ## 🎯 **Architecture OptimisĂ©e** L'authentification BTP Xpress utilise une **redirection directe vers Keycloak** sans pages intermĂ©diaires inutiles. ## 🔄 **Flux d'Authentification** ### **1. Connexion** ``` Page d'accueil → Bouton "Commencer" → /api/auth/login → Keycloak → Dashboard ``` **DĂ©tails :** - **Bouton "Commencer"** : Redirige vers `/api/auth/login` - **API Route** : `/app/api/auth/login/route.ts` construit l'URL Keycloak et redirige - **Keycloak** : GĂšre l'authentification utilisateur - **Retour** : Redirection vers `/dashboard` aprĂšs succĂšs ### **2. DĂ©connexion** ``` Menu utilisateur → "Se dĂ©connecter" → /api/auth/logout → Keycloak → Page d'accueil ``` **DĂ©tails :** - **Bouton dĂ©connexion** : Redirige vers `/api/auth/logout` - **API Route** : `/app/api/auth/logout/route.ts` construit l'URL de dĂ©connexion Keycloak - **Cookies** : Suppression automatique des tokens - **Retour** : Redirection vers `/` aprĂšs dĂ©connexion ### **3. Protection des Routes** ``` Route protĂ©gĂ©e → Middleware → VĂ©rification token → Si invalide → /api/auth/login ``` **DĂ©tails :** - **Middleware** : `/middleware.ts` vĂ©rifie les tokens sur toutes les routes protĂ©gĂ©es - **Redirection automatique** : Vers `/api/auth/login` avec paramĂštre `redirect` - **Retour intelligent** : Redirection vers la page initialement demandĂ©e ## 📁 **Structure des Fichiers** ### **API Routes** - `/app/api/auth/login/route.ts` - Redirection vers Keycloak pour connexion - `/app/api/auth/logout/route.ts` - Redirection vers Keycloak pour dĂ©connexion ### **Pages de Fallback** - `/app/not-found.tsx` - Page 404 ### **Configuration** - `/middleware.ts` - Protection des routes et redirections - `/contexts/AuthContext.tsx` - Gestion de l'Ă©tat d'authentification - `/config/keycloak.ts` - Configuration Keycloak ## ⚙ **Configuration Keycloak** ### **Variables d'Environnement** ```env NEXT_PUBLIC_KEYCLOAK_URL=https://security.lions.dev NEXT_PUBLIC_KEYCLOAK_REALM=btpxpress NEXT_PUBLIC_KEYCLOAK_CLIENT_ID=btpxpress-frontend ``` ### **URLs de Redirection Keycloak** - **Connexion** : `${KEYCLOAK_URL}/realms/${REALM}/protocol/openid_connect/auth` - **DĂ©connexion** : `${KEYCLOAK_URL}/realms/${REALM}/protocol/openid_connect/logout` - **Inscription** : `${KEYCLOAK_URL}/realms/${REALM}/protocol/openid_connect/registrations` ## 🚀 **Avantages de cette Architecture** ### **✅ SimplicitĂ©** - **Pas de pages intermĂ©diaires** inutiles - **Redirection directe** vers Keycloak - **Flux utilisateur optimisĂ©** ### **✅ Performance** - **Moins de redirections** = chargement plus rapide - **Pas de JavaScript cĂŽtĂ© client** pour l'authentification - **Server-side redirects** plus efficaces ### **✅ SĂ©curitĂ©** - **Tokens gĂ©rĂ©s cĂŽtĂ© serveur** uniquement - **Pas d'exposition des tokens** cĂŽtĂ© client - **Suppression automatique** des cookies sensibles ### **✅ Maintenance** - **Configuration centralisĂ©e** dans les API routes - **Moins de code** Ă  maintenir - **Logique d'authentification** simplifiĂ©e ## 🔧 **Utilisation** ### **Pour les DĂ©veloppeurs** ```typescript // Dans un composant, pour dĂ©clencher la connexion const handleLogin = () => { window.location.href = '/api/auth/login'; }; // Pour la dĂ©connexion const handleLogout = () => { window.location.href = '/api/auth/logout'; }; ``` ### **Pour les Utilisateurs** 1. **Cliquer sur "Commencer"** sur la page d'accueil 2. **Être redirigĂ© automatiquement** vers Keycloak 3. **Se connecter** avec ses identifiants 4. **Être redirigĂ©** vers le dashboard BTP Xpress ## đŸ› ïž **DĂ©pannage** ### **Si la redirection ne fonctionne pas** 1. VĂ©rifier les variables d'environnement Keycloak 2. VĂ©rifier que Keycloak est accessible 3. Consulter les logs de l'API route 4. Utiliser la page de fallback `/auth/login` ### **En cas d'erreur d'authentification** - Les pages de fallback (`/auth/login`, `/auth/forbidden`) restent disponibles - Les erreurs sont loggĂ©es dans la console - Redirection automatique vers les pages d'erreur appropriĂ©es Cette architecture garantit une **expĂ©rience utilisateur fluide** et une **maintenance simplifiĂ©e** du systĂšme d'authentification.