# 🔐 Configuration Keycloak pour BTPXpress Client (JSF) ## ✅ Configuration effectuée ### 1. Activation OIDC - ✅ OIDC activé en mode dev et prod dans `application.properties` - ✅ Serveur Keycloak: `https://security.lions.dev` - ✅ Realm: `btpxpress` - ✅ Client ID: `btpxpress-frontend` (client public) ### 2. Configuration des redirections - ✅ Redirect après connexion: `/dashboard.xhtml` - ✅ Logout path: `/logout` - ✅ Post-logout redirect: `/index.xhtml` ### 3. Permissions d'accès - ✅ **Ressources publiques**: CSS, JS, images, fonts - ✅ **Pages publiques**: `/`, `/index.xhtml`, `/login.xhtml`, `/error.xhtml`, `/access-denied.xhtml` - ✅ **Pages protégées**: Toutes les autres pages nécessitent une authentification ### 4. Pages créées - ✅ `access-denied.xhtml` - Page d'accès refusé ## 🚀 Étapes de configuration Keycloak ### Étape 1: Exécuter le script de configuration Le script PowerShell `configure-keycloak-jsf.ps1` va : - Se connecter à Keycloak avec les credentials admin - Mettre à jour les redirect URIs du client `btpxpress-frontend` - Ajouter les URIs pour le port 8081 (JSF) - Créer un utilisateur de test **Exécution du script:** ```powershell cd C:\Users\dadyo\PersonalProjects\lions-workspace\btpxpress\btpxpress-client .\configure-keycloak-jsf.ps1 ``` **Credentials admin Keycloak:** - Username: `admin` - Password: `KeycloakAdmin2025!` ### Étape 2: Vérifier la configuration dans Keycloak 1. Accéder à l'admin console: https://security.lions.dev/admin 2. Se connecter avec admin / KeycloakAdmin2025! 3. Sélectionner le realm `btpxpress` 4. Aller dans **Clients** → **btpxpress-frontend** 5. Vérifier que les **Valid redirect URIs** incluent: - `http://localhost:8081/*` - `http://localhost:8081/dashboard.xhtml` - `https://btpxpress.lions.dev/*` 6. Vérifier que les **Web Origins** incluent: - `http://localhost:8081` - `https://btpxpress.lions.dev` 7. Vérifier les paramètres: - ✅ **Access Type**: public - ✅ **Standard Flow Enabled**: ON - ✅ **Direct Access Grants Enabled**: ON - ✅ **PKCE Code Challenge Method**: S256 ### Étape 3: Créer un utilisateur de test (si le script ne l'a pas créé) Si l'utilisateur de test n'a pas été créé automatiquement: 1. Dans Keycloak, aller dans **Users** → **Add user** 2. Remplir: - Username: `test@btpxpress.com` - Email: `test@btpxpress.com` - First Name: `Test` - Last Name: `BTPXpress` - Email Verified: ✅ ON 3. Sauvegarder 4. Aller dans l'onglet **Credentials** 5. Définir le mot de passe: `Test123!` 6. Temporary: ❌ OFF 7. Aller dans l'onglet **Role Mappings** 8. Assigner le rôle `btpxpress_user` ou `admin` ## 🧪 Test de l'authentification ### Démarrage de l'application ```bash cd C:\Users\dadyo\PersonalProjects\lions-workspace\btpxpress\btpxpress-client mvn quarkus:dev ``` ### Scénario de test 1. **Accès à l'application** - Ouvrir: http://localhost:8081 - ➡️ Vous devriez être redirigé vers la page de connexion Keycloak 2. **Connexion** - Username: `test@btpxpress.com` - Password: `Test123!` - Cliquer sur "Sign In" 3. **Redirection après connexion** - ➡️ Vous devriez être redirigé vers http://localhost:8081/dashboard.xhtml - ✅ Vous êtes maintenant authentifié! 4. **Vérification de la session** - Naviguer vers d'autres pages (Chantiers, Clients, etc.) - ✅ Les pages doivent s'afficher sans redemander de connexion 5. **Test de déconnexion** - Accéder à http://localhost:8081/logout - ➡️ Vous devriez être déconnecté et redirigé vers `/index.xhtml` - ➡️ Puis redirigé vers Keycloak pour vous reconnecter 6. **Test d'accès protégé** - Se déconnecter complètement - Essayer d'accéder directement à http://localhost:8081/chantiers.xhtml - ➡️ Vous devriez être redirigé vers Keycloak pour vous authentifier ## 🔍 Vérifications des logs Dans les logs de l'application, vous devriez voir: ``` INFO [io.quarkus.oidc] (main) OIDC enabled INFO [io.quarkus.oidc] (main) Discovered OIDC endpoints from https://security.lions.dev/realms/btpxpress/.well-known/openid-configuration ``` Lors de la connexion: ``` DEBUG [io.quarkus.oidc] (executor-thread-X) Authenticating user... DEBUG [io.quarkus.oidc] (executor-thread-X) Successfully authenticated user: test@btpxpress.com ``` ## 🔐 Informations de sécurité ### Client Frontend (btpxpress-frontend) - **Type**: Public (pas de client secret) - **PKCE**: S256 (obligatoire pour clients publics) - **Flow**: Authorization Code avec PKCE ### Client Backend (btpxpress-backend) - **Type**: Confidential - **Client Secret**: `fCSqFPsnyrUUljAAGY8ailGKp1u6mutv` - **PKCE**: S256 - **Service Accounts**: Activés ## 📋 Roles disponibles dans Keycloak - `super_admin` - Super Administrateur - Accès total - `admin` - Administrateur - Gestion complète - `directeur` - Directeur - Vision globale - `manager` - Manager - Gestion opérationnelle - `chef_chantier` - Chef de Chantier - `conducteur_travaux` - Conducteur de Travaux - `chef_equipe` - Chef d'Équipe - `employe` - Employé - Accès standard - `ouvrier` - Ouvrier - Accès limité - `client_entreprise` - Client Entreprise - `client_particulier` - Client Particulier - `comptable` - Comptable - `commercial` - Commercial - `logisticien` - Logisticien - `viewer` - Visualiseur - Lecture seule - `guest` - Invité - Accès minimal ### Roles composites - `btpxpress_user` - Rôle de base (hérite de `offline_access`, `uma_authorization`) - `btpxpress_admin` - Rôle admin (hérite de `btpxpress_user`, `admin`, `super_admin`) - `btpxpress_manager` - Rôle manager (hérite de `btpxpress_user`, `manager`) ## 🛠️ Dépannage ### Problème: "Invalid redirect uri" **Solution**: Vérifier que les redirect URIs sont bien configurés dans Keycloak pour le port 8081 ### Problème: "CORS error" **Solution**: Vérifier que `http://localhost:8081` est dans les Web Origins ### Problème: "Token validation failed" **Solution**: - Vérifier que l'issuer est correct: `https://security.lions.dev/realms/btpxpress` - Vérifier que la découverte OIDC est activée ### Problème: Boucle de redirection infinie **Solution**: - Vérifier que `/index.xhtml` est dans les pages publiques - Vérifier que le redirect-path est correct ### Problème: Erreur SSL/TLS **Solution**: En développement, vous pouvez désactiver la vérification TLS (NON RECOMMANDÉ EN PRODUCTION): ```properties %dev.quarkus.oidc.tls.verification=none ``` ## 📝 Notes importantes 1. **En développement**: OIDC est maintenant activé (avant il était désactivé) 2. **Session timeout**: 30 minutes d'inactivité 3. **Token lifetime**: 5 minutes (refresh automatique) 4. **Cookie path**: `/` (toute l'application) 5. **Cookie security**: En production, les cookies sont sécurisés (HTTPS only) ## 🎯 Prochaines étapes 1. ✅ Configurer Keycloak avec le script PowerShell 2. ✅ Tester la connexion avec l'utilisateur de test 3. 📋 Créer des utilisateurs supplémentaires dans Keycloak 4. 📋 Configurer les rôles et permissions spécifiques 5. 📋 Implémenter l'autorisation basée sur les rôles dans l'application 6. 📋 Ajouter l'affichage du nom d'utilisateur dans le menu 7. 📋 Ajouter un bouton de déconnexion dans l'interface ## 🔗 Liens utiles - **Keycloak Admin Console**: https://security.lions.dev/admin - **Realm btpxpress**: https://security.lions.dev/realms/btpxpress - **OIDC Configuration**: https://security.lions.dev/realms/btpxpress/.well-known/openid-configuration - **Application**: http://localhost:8081