203 lines
6.7 KiB
Markdown
203 lines
6.7 KiB
Markdown
# 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 ✅
|