126 lines
4.2 KiB
Markdown
126 lines
4.2 KiB
Markdown
# 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.
|