# 🔐 Configuration Keycloak pour BTPXpress Client (JSF)

## ✅ Configuration effectuée

### 1. Activation OIDC
- ✅ OIDC activé en mode dev et prod dans `application.properties`
- ✅ Serveur Keycloak: `https://security.lions.dev`
- ✅ Realm: `btpxpress`
- ✅ Client ID: `btpxpress-frontend` (client public)

### 2. Configuration des redirections
- ✅ Redirect après connexion: `/dashboard.xhtml`
- ✅ Logout path: `/logout`
- ✅ Post-logout redirect: `/index.xhtml`

### 3. Permissions d'accès
- ✅ **Ressources publiques**: CSS, JS, images, fonts
- ✅ **Pages publiques**: `/`, `/index.xhtml`, `/login.xhtml`, `/error.xhtml`, `/access-denied.xhtml`
- ✅ **Pages protégées**: Toutes les autres pages nécessitent une authentification

### 4. Pages créées
- ✅ `access-denied.xhtml` - Page d'accès refusé

## 🚀 Étapes de configuration Keycloak

### Étape 1: Exécuter le script de configuration

Le script PowerShell `configure-keycloak-jsf.ps1` va :
- Se connecter à Keycloak avec les credentials admin
- Mettre à jour les redirect URIs du client `btpxpress-frontend`
- Ajouter les URIs pour le port 8081 (JSF)
- Créer un utilisateur de test

**Exécution du script:**

```powershell
cd C:\Users\dadyo\PersonalProjects\lions-workspace\btpxpress\btpxpress-client
.\configure-keycloak-jsf.ps1
```

**Credentials admin Keycloak:**
- Username: `admin`
- Password: `KeycloakAdmin2025!`

### Étape 2: Vérifier la configuration dans Keycloak

1. Accéder à l'admin console: https://security.lions.dev/admin
2. Se connecter avec admin / KeycloakAdmin2025!
3. Sélectionner le realm `btpxpress`
4. Aller dans **Clients** → **btpxpress-frontend**
5. Vérifier que les **Valid redirect URIs** incluent:
   - `http://localhost:8081/*`
   - `http://localhost:8081/dashboard.xhtml`
   - `https://btpxpress.lions.dev/*`

6. Vérifier que les **Web Origins** incluent:
   - `http://localhost:8081`
   - `https://btpxpress.lions.dev`

7. Vérifier les paramètres:
   - ✅ **Access Type**: public
   - ✅ **Standard Flow Enabled**: ON
   - ✅ **Direct Access Grants Enabled**: ON
   - ✅ **PKCE Code Challenge Method**: S256

### Étape 3: Créer un utilisateur de test (si le script ne l'a pas créé)

Si l'utilisateur de test n'a pas été créé automatiquement:

1. Dans Keycloak, aller dans **Users** → **Add user**
2. Remplir:
   - Username: `test@btpxpress.com`
   - Email: `test@btpxpress.com`
   - First Name: `Test`
   - Last Name: `BTPXpress`
   - Email Verified: ✅ ON
3. Sauvegarder
4. Aller dans l'onglet **Credentials**
5. Définir le mot de passe: `Test123!`
6. Temporary: ❌ OFF
7. Aller dans l'onglet **Role Mappings**
8. Assigner le rôle `btpxpress_user` ou `admin`

## 🧪 Test de l'authentification

### Démarrage de l'application

```bash
cd C:\Users\dadyo\PersonalProjects\lions-workspace\btpxpress\btpxpress-client
mvn quarkus:dev
```

### Scénario de test

1. **Accès à l'application**
   - Ouvrir: http://localhost:8081
   - ➡️ Vous devriez être redirigé vers la page de connexion Keycloak

2. **Connexion**
   - Username: `test@btpxpress.com`
   - Password: `Test123!`
   - Cliquer sur "Sign In"

3. **Redirection après connexion**
   - ➡️ Vous devriez être redirigé vers http://localhost:8081/dashboard.xhtml
   - ✅ Vous êtes maintenant authentifié!

4. **Vérification de la session**
   - Naviguer vers d'autres pages (Chantiers, Clients, etc.)
   - ✅ Les pages doivent s'afficher sans redemander de connexion

5. **Test de déconnexion**
   - Accéder à http://localhost:8081/logout
   - ➡️ Vous devriez être déconnecté et redirigé vers `/index.xhtml`
   - ➡️ Puis redirigé vers Keycloak pour vous reconnecter

6. **Test d'accès protégé**
   - Se déconnecter complètement
   - Essayer d'accéder directement à http://localhost:8081/chantiers.xhtml
   - ➡️ Vous devriez être redirigé vers Keycloak pour vous authentifier

## 🔍 Vérifications des logs

Dans les logs de l'application, vous devriez voir:

```
INFO  [io.quarkus.oidc] (main) OIDC enabled
INFO  [io.quarkus.oidc] (main) Discovered OIDC endpoints from https://security.lions.dev/realms/btpxpress/.well-known/openid-configuration
```

Lors de la connexion:
```
DEBUG [io.quarkus.oidc] (executor-thread-X) Authenticating user...
DEBUG [io.quarkus.oidc] (executor-thread-X) Successfully authenticated user: test@btpxpress.com
```

## 🔐 Informations de sécurité

### Client Frontend (btpxpress-frontend)
- **Type**: Public (pas de client secret)
- **PKCE**: S256 (obligatoire pour clients publics)
- **Flow**: Authorization Code avec PKCE

### Client Backend (btpxpress-backend)
- **Type**: Confidential
- **Client Secret**: `fCSqFPsnyrUUljAAGY8ailGKp1u6mutv`
- **PKCE**: S256
- **Service Accounts**: Activés

## 📋 Roles disponibles dans Keycloak

- `super_admin` - Super Administrateur - Accès total
- `admin` - Administrateur - Gestion complète
- `directeur` - Directeur - Vision globale
- `manager` - Manager - Gestion opérationnelle
- `chef_chantier` - Chef de Chantier
- `conducteur_travaux` - Conducteur de Travaux
- `chef_equipe` - Chef d'Équipe
- `employe` - Employé - Accès standard
- `ouvrier` - Ouvrier - Accès limité
- `client_entreprise` - Client Entreprise
- `client_particulier` - Client Particulier
- `comptable` - Comptable
- `commercial` - Commercial
- `logisticien` - Logisticien
- `viewer` - Visualiseur - Lecture seule
- `guest` - Invité - Accès minimal

### Roles composites
- `btpxpress_user` - Rôle de base (hérite de `offline_access`, `uma_authorization`)
- `btpxpress_admin` - Rôle admin (hérite de `btpxpress_user`, `admin`, `super_admin`)
- `btpxpress_manager` - Rôle manager (hérite de `btpxpress_user`, `manager`)

## 🛠️ Dépannage

### Problème: "Invalid redirect uri"
**Solution**: Vérifier que les redirect URIs sont bien configurés dans Keycloak pour le port 8081

### Problème: "CORS error"
**Solution**: Vérifier que `http://localhost:8081` est dans les Web Origins

### Problème: "Token validation failed"
**Solution**:
- Vérifier que l'issuer est correct: `https://security.lions.dev/realms/btpxpress`
- Vérifier que la découverte OIDC est activée

### Problème: Boucle de redirection infinie
**Solution**:
- Vérifier que `/index.xhtml` est dans les pages publiques
- Vérifier que le redirect-path est correct

### Problème: Erreur SSL/TLS
**Solution**: En développement, vous pouvez désactiver la vérification TLS (NON RECOMMANDÉ EN PRODUCTION):
```properties
%dev.quarkus.oidc.tls.verification=none
```

## 📝 Notes importantes

1. **En développement**: OIDC est maintenant activé (avant il était désactivé)
2. **Session timeout**: 30 minutes d'inactivité
3. **Token lifetime**: 5 minutes (refresh automatique)
4. **Cookie path**: `/` (toute l'application)
5. **Cookie security**: En production, les cookies sont sécurisés (HTTPS only)

## 🎯 Prochaines étapes

1. ✅ Configurer Keycloak avec le script PowerShell
2. ✅ Tester la connexion avec l'utilisateur de test
3. 📋 Créer des utilisateurs supplémentaires dans Keycloak
4. 📋 Configurer les rôles et permissions spécifiques
5. 📋 Implémenter l'autorisation basée sur les rôles dans l'application
6. 📋 Ajouter l'affichage du nom d'utilisateur dans le menu
7. 📋 Ajouter un bouton de déconnexion dans l'interface

## 🔗 Liens utiles

- **Keycloak Admin Console**: https://security.lions.dev/admin
- **Realm btpxpress**: https://security.lions.dev/realms/btpxpress
- **OIDC Configuration**: https://security.lions.dev/realms/btpxpress/.well-known/openid-configuration
- **Application**: http://localhost:8081
