# Configuration Keycloak - Utilisateur de Test

Ce document explique comment configurer un utilisateur de test dans Keycloak avec les rôles nécessaires pour utiliser `lions-user-manager`.

## Prérequis

- Keycloak accessible sur `http://localhost:8180`
- Accès admin : `admin` / `admin`
- Realm `lions-user-manager` créé

## Étapes de Configuration

### 1. Créer l'utilisateur de test

1. Connectez-vous à Keycloak Admin Console : `http://localhost:8180`
2. Sélectionnez le realm `lions-user-manager`
3. Allez dans **Users** → **Add user**
4. Remplissez les informations :
   - **Username** : `test-user` (ou le nom de votre choix)
   - **Email** : `test@lions.dev`
   - **First name** : `Test`
   - **Last name** : `User`
   - **Email verified** : `ON`
   - **Enabled** : `ON`
5. Cliquez sur **Create**

### 2. Définir le mot de passe

1. Dans la page de l'utilisateur, allez dans l'onglet **Credentials**
2. Cliquez sur **Set password**
3. Définissez un mot de passe (ex: `test123`)
4. **Temporary** : `OFF` (pour éviter de changer le mot de passe à la première connexion)
5. Cliquez sur **Save**
6. Confirmez dans la popup

### 3. Créer les rôles Realm nécessaires

Les rôles suivants doivent exister dans le realm `lions-user-manager` :

#### Rôles requis pour les endpoints Users :
- `admin` - Accès complet
- `user_manager` - Gestion des utilisateurs
- `user_viewer` - Consultation des utilisateurs

#### Rôles requis pour les endpoints Roles :
- `role_manager` - Gestion des rôles
- `role_viewer` - Consultation des rôles

#### Rôles requis pour les endpoints Audit :
- `auditor` - Accès aux logs d'audit

#### Rôles requis pour les endpoints Sync :
- `sync_manager` - Gestion de la synchronisation

**Création des rôles :**

1. Allez dans **Realm roles** → **Create role**
2. Créez chaque rôle un par un :
   - `admin`
   - `user_manager`
   - `user_viewer`
   - `role_manager`
   - `role_viewer`
   - `auditor`
   - `sync_manager`

### 4. Assigner les rôles à l'utilisateur

1. Retournez dans **Users** → Sélectionnez votre utilisateur de test
2. Allez dans l'onglet **Role mapping**
3. Cliquez sur **Assign role**
4. Sélectionnez **Filter by realm roles**
5. Cochez les rôles nécessaires :
   - Pour un accès complet : `admin`
   - Pour un accès limité : `user_manager`, `user_viewer`, `role_manager`, `role_viewer`
6. Cliquez sur **Assign**

### 5. Configurer le Client pour les rôles

1. Allez dans **Clients** → Sélectionnez `lions-user-manager-client`
2. Allez dans l'onglet **Mappers**
3. Vérifiez qu'il existe un mapper pour les rôles realm :
   - **Name** : `realm roles`
   - **Mapper Type** : `Realm Role`
   - **Token Claim Name** : `realm_access.roles`
   - **Add to access token** : `ON`
   - **Add to ID token** : `ON`
   - **Add to userinfo** : `ON`

   Si le mapper n'existe pas, créez-le :
   - Cliquez sur **Create**
   - **Name** : `realm roles`
   - **Mapper Type** : `Realm Role`
   - **Token Claim Name** : `realm_access.roles`
   - **Add to access token** : `ON`
   - **Add to ID token** : `ON`
   - **Add to userinfo** : `ON`
   - Cliquez sur **Save**

### 6. Vérifier la configuration

1. Connectez-vous au client avec l'utilisateur de test
2. Ouvrez les DevTools du navigateur (F12)
3. Allez dans **Application** → **Cookies**
4. Trouvez le cookie de session
5. Décodez le token JWT (utilisez https://jwt.io)
6. Vérifiez que le claim `realm_access.roles` contient les rôles assignés

## Configuration rapide via script

Un script de configuration automatique sera créé prochainement.

## Rôles par endpoint

### `/api/users/*`
- `admin` - Accès complet
- `user_manager` - Création, modification, suppression
- `user_viewer` - Consultation uniquement

### `/api/roles/*`
- `admin` - Accès complet
- `role_manager` - Création, modification, suppression
- `role_viewer` - Consultation uniquement

### `/api/audit/*`
- `admin` - Accès complet
- `auditor` - Consultation des logs

### `/api/sync/*`
- `admin` - Accès complet
- `sync_manager` - Gestion de la synchronisation

## Notes importantes

- Les rôles sont vérifiés côté backend via `@RolesAllowed`
- Le token JWT doit contenir les rôles dans `realm_access.roles`
- Le client propage automatiquement le token au backend via `bearer-token-propagation=true`
- En production, utilisez des rôles plus granulaires selon les besoins

