# Configuration Keycloak pour lions-user-manager (Mode DEV) ## Problème résolu **Erreur HTTP 405 sur `/api/users/search`** : Cette erreur se produisait car le client et le serveur utilisaient des realms Keycloak différents. Les tokens générés pour un realm ne sont pas valides pour un autre realm. ## Configuration corrigée ### Client (lions-user-manager-client-quarkus-primefaces-freya) - **Realm** : `lions-user-manager` - **Auth Server** : `http://localhost:8180/realms/lions-user-manager` - **Client ID** : `lions-user-manager-client` - **Secret** : `NTuaQpk5E6qiMqAWTFrCOcIkOABzZzKO` ### Serveur (lions-user-manager-server-impl-quarkus) - Mode DEV - **Realm** : `lions-user-manager` - **Auth Server** : `http://localhost:8180/realms/lions-user-manager` - **Client ID** : `lions-user-manager-backend` - **Secret** : `NTuaQpk5E6qiMqAWTFrCOcIkOABzZzKO` - **Admin Client** : `admin-cli` sur le realm `lions-user-manager` --- ## Étapes de configuration dans Keycloak (http://localhost:8180) ### 1. Créer le realm `lions-user-manager` 1. Connectez-vous à Keycloak : http://localhost:8180 2. Cliquez sur le dropdown en haut à gauche (actuellement sur "Master") 3. Cliquez sur **"Create Realm"** 4. Nom du realm : `lions-user-manager` 5. **Enabled** : `ON` 6. Cliquez sur **"Create"** ### 2. Créer le client backend `lions-user-manager-backend` 1. Dans le realm `lions-user-manager`, allez dans **Clients** → **Create client** 2. **Client ID** : `lions-user-manager-backend` 3. **Client Protocol** : `openid-connect` 4. Cliquez sur **"Next"** 5. **Client authentication** : `ON` (pour avoir un client confidentiel) 6. **Authorization** : `OFF` 7. **Standard flow** : `ON` 8. **Direct access grants** : `ON` 9. **Service accounts roles** : `ON` 10. Cliquez sur **"Next"** puis **"Save"** 11. Allez dans l'onglet **"Credentials"** 12. Copiez le **Client secret** : `NTuaQpk5E6qiMqAWTFrCOcIkOABzZzKO` - Si le secret est différent, régénérez-le ou mettez à jour `application.properties` ### 3. Créer le client frontend `lions-user-manager-client` 1. Dans le realm `lions-user-manager`, allez dans **Clients** → **Create client** 2. **Client ID** : `lions-user-manager-client` 3. **Client Protocol** : `openid-connect` 4. Cliquez sur **"Next"** 5. **Client authentication** : `ON` 6. **Authorization** : `OFF` 7. **Standard flow** : `ON` 8. **Direct access grants** : `ON` 9. Cliquez sur **"Next"** 10. **Valid redirect URIs** : - `http://localhost:8082/*` - `http://localhost:8082/auth/callback` 11. **Valid post logout redirect URIs** : `http://localhost:8082/*` 12. **Web origins** : `http://localhost:8082` 13. Cliquez sur **"Save"** 14. Allez dans l'onglet **"Credentials"** 15. Vérifiez que le **Client secret** est : `NTuaQpk5E6qiMqAWTFrCOcIkOABzZzKO` ### 4. Créer les rôles 1. Dans le realm `lions-user-manager`, allez dans **Realm roles** 2. Cliquez sur **"Create role"** 3. Créez les rôles suivants : - **admin** : Administrateur système - **user_manager** : Gestionnaire d'utilisateurs - **user_viewer** : Consultation uniquement ### 5. Créer un utilisateur de test 1. Dans le realm `lions-user-manager`, allez dans **Users** → **Add user** 2. **Username** : `testadmin` 3. **Email** : `admin@test.local` 4. **First name** : `Test` 5. **Last name** : `Admin` 6. **Email verified** : `ON` 7. **Enabled** : `ON` 8. Cliquez sur **"Create"** 9. Allez dans l'onglet **"Credentials"** 10. Cliquez sur **"Set password"** - Password : `admin123` - Temporary : `OFF` 11. Allez dans l'onglet **"Role mapping"** 12. Cliquez sur **"Assign role"** 13. Sélectionnez les rôles : `admin` et `user_manager` 14. Cliquez sur **"Assign"** ### 6. Configurer le scope "roles" 1. Dans le realm `lions-user-manager`, allez dans **Client scopes** 2. Trouvez ou créez le scope **"roles"** 3. Vérifiez qu'il est assigné au client `lions-user-manager-client` 4. Dans le scope "roles", allez dans **"Mappers"** 5. Vérifiez qu'il y a un mapper pour `realm roles` : - **Name** : `realm roles` - **Mapper Type** : `User Realm Role` - **Token Claim Name** : `realm_access.roles` - **Claim JSON Type** : `String` - **Add to ID token** : `ON` - **Add to access token** : `ON` - **Add to userinfo** : `ON` --- ## Vérification de la configuration ### 1. Tester l'authentification client ```bash curl -X POST "http://localhost:8180/realms/lions-user-manager/protocol/openid-connect/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id=lions-user-manager-client" \ -d "client_secret=NTuaQpk5E6qiMqAWTFrCOcIkOABzZzKO" \ -d "grant_type=password" \ -d "username=testadmin" \ -d "password=admin123" \ -d "scope=openid profile email roles" ``` Vous devriez recevoir un **access_token** et un **id_token**. ### 2. Vérifier le token Copiez l'`access_token` et décodez-le sur https://jwt.io Vérifiez que le token contient : - `"iss": "http://localhost:8180/realms/lions-user-manager"` - `"azp": "lions-user-manager-client"` - `"realm_access": { "roles": ["admin", "user_manager", ...] }` ### 3. Tester l'API backend Avec le token obtenu, testez l'endpoint : ```bash curl -X POST "http://localhost:8081/api/users/search" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "realmName": "lions-user-manager", "page": 0, "pageSize": 20 }' ``` Si tout est correct, vous devriez recevoir une réponse 200 avec la liste des utilisateurs. --- ## Logs utiles pour le debugging ### Serveur (lions-user-manager-server) ```bash cd lions-user-manager/lions-user-manager-server-impl-quarkus mvn quarkus:dev ``` Recherchez dans les logs : - `Token Bearer ajouté au header Authorization` (client) - `POST /api/users/search - Recherche d'utilisateurs` (serveur) - Erreurs d'authentification OIDC ### Client (lions-user-manager-client) ```bash cd lions-user-manager/lions-user-manager-client-quarkus-primefaces-freya mvn quarkus:dev ``` Recherchez dans les logs : - `Token JWT non disponible` (problème de connexion) - `Erreur lors de la recherche` (problème d'API) --- ## Résumé des modifications effectuées ### Fichiers modifiés 1. **`lions-user-manager-server-impl-quarkus/src/main/resources/application.properties`** - Ajout de la configuration dev pour OIDC pointant vers `http://localhost:8180/realms/lions-user-manager` - Ajout de la configuration dev pour Keycloak Admin Client - Ajout du realm `lions-user-manager` aux realms autorisés en dev ### Prochaines étapes 1. Configurez Keycloak selon les étapes ci-dessus 2. Redémarrez le serveur backend : `mvn quarkus:dev` 3. Redémarrez le client frontend : `mvn quarkus:dev` 4. Connectez-vous avec `testadmin` / `admin123` 5. Accédez à `/pages/user-manager/users/list.xhtml` 6. L'erreur HTTP 405 devrait disparaître ✅