# Configuration OIDC pour BTPXpress Client JSF

## 🎯 Statut: CONFIGURATION COMPLETE ET VALIDEE ✅

L'application BTPXpress Client JSF est maintenant correctement configuree pour l'authentification OIDC avec Keycloak.

---

## 🚀 Demarrage rapide

### 1. Verifier la configuration des secrets
```bash
powershell -ExecutionPolicy Bypass -File verify-secrets.ps1
```

**Sortie attendue:**
```
[OK] TOUS LES SECRETS SONT CORRECTEMENT CONFIGURES!
```

### 2. Demarrer l'application
```bash
mvn quarkus:dev
```

### 3. Acceder a l'application
Ouvrir dans un navigateur: **http://localhost:8081**

**Comportement attendu:**
1. Redirection automatique vers `https://security.lions.dev`
2. Page de connexion Keycloak
3. Apres connexion, redirection vers le dashboard

### 4. Utilisateurs disponibles
- `admin@btpxpress.dev`
- `directeur@btpxpress.dev`
- `chef@btpxpress.dev`
- `client@entreprise.com`

*(Utiliser les mots de passe definis dans Keycloak)*

---

## 📁 Fichiers de configuration

### application.properties (Principal)
Fichier: `src/main/resources/application.properties`

**Configuration OIDC complete:**
```properties
# Serveur Keycloak
quarkus.oidc.auth-server-url=https://security.lions.dev/realms/btpxpress
quarkus.oidc.client-id=btpxpress-frontend
quarkus.oidc.application-type=web-app

# Client Secret
quarkus.oidc.credentials.secret=0Ph4e31lQQuonodmLQG3JycehbFL1Hei

# PKCE Configuration
quarkus.oidc.authentication.pkce-required=true
quarkus.oidc.authentication.pkce-secret=false
quarkus.oidc.authentication.state-secret=btpxpress-pkce-state-secret-32ch

# Redirection
quarkus.oidc.authentication.redirect-path=/dashboard.xhtml

# Token Encryption
quarkus.oidc.token-state-manager.encryption-secret=btpxpress-secure-cookie-encryption-key-32chars-2025
```

---

## 📚 Documentation disponible

| Fichier | Description |
|---------|-------------|
| **RESOLUTION_ERREURS_OIDC.md** | Guide complet des erreurs rencontrees et solutions |
| **OIDC_SECRETS_CONFIGURATION.md** | Explication detaillee des 3 secrets OIDC |
| **CORRECTIONS_OIDC.md** | Historique des corrections appliquees |
| **CONFIGURATION_KEYCLOAK_JSF.md** | Guide de configuration Keycloak |

---

## 🔐 Les 3 secrets configures

| Secret | Longueur | Usage |
|--------|----------|-------|
| Client Secret | 32 chars | Authentification avec Keycloak |
| State Secret | 32 chars | Encryption PKCE code verifier |
| Token Encryption | 51 chars | Encryption tokens dans cookies |

---

## 🛠️ Scripts PowerShell disponibles

### verify-secrets.ps1
Verifie que tous les secrets sont correctement configures.
```bash
powershell -ExecutionPolicy Bypass -File verify-secrets.ps1
```

### get-client-secret.ps1
Recupere le client secret depuis Keycloak.
```bash
powershell -ExecutionPolicy Bypass -File get-client-secret.ps1
```

### configure-keycloak-jsf.ps1
Configure les redirect URIs dans Keycloak pour le port 8081.
```bash
powershell -ExecutionPolicy Bypass -File configure-keycloak-jsf.ps1
```

### check-client-config.ps1
Verifie la configuration du client dans Keycloak.
```bash
powershell -ExecutionPolicy Bypass -File check-client-config.ps1
```

---

## ⚠️ Points importants

### 1. Secrets en production
**NE JAMAIS commiter les secrets en production!**

Utiliser des variables d'environnement:
```properties
quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET}
quarkus.oidc.authentication.state-secret=${OIDC_STATE_SECRET}
quarkus.oidc.token-state-manager.encryption-secret=${OIDC_TOKEN_ENCRYPTION_SECRET}
```

### 2. pkce-secret vs state-secret
**IMPORTANT:** Ne pas avoir les deux configures simultanement!

- **Option A**: `pkce-secret=true` (utilise client secret) - NE PAS definir state-secret
- **Option B**: `pkce-secret=false` (utilise secret dedie) - DEFINIR state-secret ✅ (CHOISI)

### 3. Longueur des secrets
- Client Secret: **Exactement 32 caracteres**
- State Secret: **Exactement 32 caracteres**
- Token Encryption Secret: **Minimum 32 caracteres** (51 dans notre config)

---

## 🧪 Tests effectues

- [x] Verification des 3 secrets avec verify-secrets.ps1
- [x] Client Keycloak configure comme Confidential
- [x] PKCE S256 active
- [x] Redirect URIs incluent http://localhost:8081/*
- [x] index.xhtml supprime pour interception OIDC
- [x] Permissions HTTP configurees (seules ressources statiques publiques)
- [x] Logs OIDC en mode DEBUG

---

## 🔄 Flux d'authentification

```
┌─────────────┐
│  Navigateur │
└──────┬──────┘
       │
       │ 1. GET http://localhost:8081
       ▼
┌─────────────┐
│   Quarkus   │ OIDC intercepte (page protegee)
│   OIDC      │ Generate PKCE + encrypt avec state-secret
└──────┬──────┘
       │
       │ 2. Redirect to Keycloak
       ▼
┌─────────────┐
│  Keycloak   │ Page de connexion
│ security.   │ Utilisateur se connecte
│ lions.dev   │
└──────┬──────┘
       │
       │ 3. Redirect with auth code
       ▼
┌─────────────┐
│   Quarkus   │ Decrypt PKCE verifier
│   OIDC      │ Exchange code with client secret
│             │ Encrypt tokens with token-encryption-secret
└──────┬──────┘
       │
       │ 4. Redirect to dashboard
       ▼
┌─────────────┐
│  Dashboard  │ ✅ AUTHENTIFIE!
└─────────────┘
```

---

## 🐛 Troubleshooting

### L'application ne demarre pas
1. Verifier les secrets avec `verify-secrets.ps1`
2. Verifier les logs dans la console
3. S'assurer que Keycloak est accessible: https://security.lions.dev

### Pas de redirection vers Keycloak
1. Verifier que index.xhtml n'existe pas (doit etre supprime)
2. Verifier les permissions HTTP dans application.properties
3. Vider le cache du navigateur

### Erreur "Authentication has failed"
1. Verifier que l'utilisateur existe dans Keycloak
2. Verifier les redirect URIs configurees dans Keycloak
3. Verifier les logs DEBUG OIDC

### Erreur "Secret key" ou "Both configured"
1. Consulter RESOLUTION_ERREURS_OIDC.md
2. Re-verifier les secrets avec verify-secrets.ps1

---

## 📞 Support

Pour toute question sur la configuration OIDC:
1. Consulter **RESOLUTION_ERREURS_OIDC.md** pour les erreurs communes
2. Consulter **OIDC_SECRETS_CONFIGURATION.md** pour comprendre les secrets
3. Verifier les logs de l'application avec `quarkus.log.category."io.quarkus.oidc".level=DEBUG`

---

## 🎉 Configuration realisee avec succes!

**Date**: 2025-11-07
**Version Quarkus**: 3.15.1
**Keycloak**: https://security.lions.dev
**Status**: ✅ PRET POUR UTILISATION

L'application est maintenant prete a etre demarree et testee!

```bash
mvn quarkus:dev
```

Puis acceder a: **http://localhost:8081** 🚀
