# Configuration du Client Keycloak - Lions User Manager ## Problème Identifié Le client JSF est en **boucle d'authentification infinie** : ``` Starting an authentication challenge for tenant Default ``` **Cause** : Le client `lions-user-manager-client` n'existe pas ou est mal configuré dans Keycloak. --- ## Solution : Créer le Client dans Keycloak ### Étape 1 : Accéder à la Console Admin Keycloak 1. Ouvrir : http://localhost:8180 2. Cliquer sur **Administration Console** 3. Se connecter avec : - **Username** : `admin` - **Password** : `admin` ### Étape 2 : Sélectionner le Realm 1. Dans le menu déroulant en haut à gauche, sélectionner : **lions-user-manager** 2. Si le realm n'existe pas, le créer : - Cliquer sur le menu déroulant - **Create Realm** - **Realm name** : `lions-user-manager` - **Save** ### Étape 3 : Créer le Client 1. Dans le menu de gauche, aller à **Clients** 2. Cliquer sur **Create client** #### General Settings - **Client type** : OpenID Connect - **Client ID** : `lions-user-manager-client` - Cliquer sur **Next** #### Capability config - **Client authentication** : **ON** (cocher) - **Authorization** : OFF - **Authentication flow** : - ✅ **Standard flow** (Authorization Code Flow) - ✅ **Direct access grants** (Resource Owner Password Credentials) - ❌ Implicit flow - ❌ Service accounts roles - Cliquer sur **Next** #### Login settings - **Root URL** : `http://localhost:8082` - **Home URL** : `http://localhost:8082` - **Valid redirect URIs** : ``` http://localhost:8082/* http://localhost:8082/auth/callback ``` - **Valid post logout redirect URIs** : ``` http://localhost:8082/* ``` - **Web origins** : ``` http://localhost:8082 ``` - Cliquer sur **Save** ### Étape 4 : Récupérer le Client Secret 1. Aller dans l'onglet **Credentials** 2. Copier le **Client secret** affiché 3. **Important** : Vérifier que ce secret correspond à celui dans `application-dev.properties` --- ## Vérification de la Configuration Client ### Fichier : `application-dev.properties` Vérifier que ces valeurs correspondent à la configuration Keycloak : ```properties quarkus.oidc.auth-server-url=http://localhost:8180/realms/lions-user-manager quarkus.oidc.client-id=lions-user-manager-client quarkus.oidc.credentials.secret=VOTRE_CLIENT_SECRET_ICI quarkus.oidc.token.issuer=http://localhost:8180/realms/lions-user-manager ``` **⚠️ IMPORTANT** : Remplacer `VOTRE_CLIENT_SECRET_ICI` par le secret obtenu à l'Étape 4. --- ## Configuration Avancée du Client (Optionnel mais Recommandé) ### Onglet Settings #### Access settings - **Access Type** : Confidential (automatique avec Client authentication ON) - **Standard Flow Enabled** : ON - **Direct Access Grants Enabled** : ON - **Implicit Flow Enabled** : OFF - **Service Accounts Enabled** : OFF #### Authentication flow overrides - **Browser Flow** : browser (défaut) - **Direct Grant Flow** : direct grant (défaut) ### Onglet Advanced #### Advanced Settings - **Access Token Lifespan** : 5 Minutes (défaut, peut être augmenté en dev) - **Client Session Idle** : 30 Minutes - **Client Session Max** : 10 Hours - **PKCE Code Challenge Method** : S256 (recommandé) --- ## Test de la Configuration ### Test 1 : Vérifier que Keycloak accepte le client ```bash curl -X POST "http://localhost:8180/realms/lions-user-manager/protocol/openid-connect/token" \ -d "client_id=lions-user-manager-client" \ -d "client_secret=VOTRE_SECRET" \ -d "grant_type=password" \ -d "username=admin" \ -d "password=admin" ``` **Résultat attendu** : Un JSON avec `access_token`, `refresh_token`, etc. **Si erreur `invalid_client`** : Le client n'existe pas ou le secret est incorrect. ### Test 2 : Tester l'authentification via le navigateur 1. Arrêter le client JSF (Ctrl+C) 2. Supprimer les cookies du navigateur pour `localhost:8082` 3. Redémarrer le client : `mvn quarkus:dev` 4. Accéder à : http://localhost:8082/pages/user-manager/users/list.xhtml 5. **Résultat attendu** : Redirection vers Keycloak pour login --- ## Checklist de Vérification - [ ] Realm `lions-user-manager` existe dans Keycloak - [ ] Client `lions-user-manager-client` existe dans le realm - [ ] Client authentication est **ON** - [ ] Standard flow est **enabled** - [ ] Valid redirect URIs contient `http://localhost:8082/*` - [ ] Client secret dans `application-dev.properties` correspond au secret Keycloak - [ ] Keycloak est accessible sur http://localhost:8180 - [ ] Le client JSF redémarre après modification du secret --- ## Dépannage ### Problème : "invalid_client" - **Cause** : Client ID ou secret incorrect - **Solution** : Vérifier que le client existe et que le secret correspond ### Problème : "invalid_redirect_uri" - **Cause** : L'URL de redirection n'est pas dans la liste des Valid redirect URIs - **Solution** : Ajouter `http://localhost:8082/*` dans les Valid redirect URIs ### Problème : Boucle infinie d'authentification - **Cause** : Le client ne peut pas échanger le code d'autorisation contre un token - **Solution** : 1. Vérifier que Standard Flow est enabled 2. Vérifier le client secret 3. Vérifier les redirect URIs 4. Supprimer les cookies du navigateur ### Problème : "unauthorized_client" - **Cause** : Le flow d'authentification n'est pas autorisé - **Solution** : Activer "Standard flow" dans la configuration du client --- ## Redémarrage après Configuration Après avoir créé/modifié le client dans Keycloak : ```bash # Arrêter le client JSF (Ctrl+C dans le terminal) # Redémarrer cd lions-user-manager/lions-user-manager-client-quarkus-primefaces-freya mvn quarkus:dev ``` --- **Date** : 2025-12-25 **Statut** : Configuration requise avant utilisation