Migration complète vers PrimeFaces Freya - Corrections des incompatibilités et intégration de primefaces-freya-extension
This commit is contained in:
202
KEYCLOAK_DEV_SETUP.md
Normal file
202
KEYCLOAK_DEV_SETUP.md
Normal file
@@ -0,0 +1,202 @@
|
||||
# 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 ✅
|
||||
Reference in New Issue
Block a user