204 lines
5.7 KiB
Markdown
204 lines
5.7 KiB
Markdown
# 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
|