# 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 ✅
