# Audit de Configuration - BTP Xpress Client ↔ Serveur ## ✅ Résumé de l'audit effectué Date : 2025-11-01 Portée : Configuration complète du client PrimeFaces et mapping avec le serveur backend --- ## 1. Structure du Projet Client ### ✅ Structure des fichiers - **XHTML** : `src/main/resources/META-INF/resources/` (structure Quarkus correcte) - **Configuration** : `src/main/resources/META-INF/web.xml` et `application.properties` - **Beans CDI** : `src/main/java/dev/lions/btpxpress/` - **Services** : `src/main/java/dev/lions/btpxpress/service/` ### ✅ Fichiers créés/vérifiés - ✅ `BtpXpressApiClient.java` - Interface REST Client pour communication backend - ✅ `ChantierService.java` - Service encapsulant les appels API chantiers - ✅ `application.properties` - Configuration complète OIDC + REST Client - ✅ `pom.xml` - Dépendances OIDC et JWT ajoutées --- ## 2. Configuration OIDC / Keycloak ### ✅ Client (PrimeFaces) ```properties quarkus.oidc.enabled=true quarkus.oidc.auth-server-url=https://security.lions.dev/realms/btpxpress quarkus.oidc.client-id=btpxpress-frontend quarkus.oidc.application-type=web-app quarkus.oidc.token.issuer=https://security.lions.dev/realms/btpxpress ``` ### ✅ Serveur (Backend) ```properties mp.jwt.verify.publickey.location=https://security.lions.dev/realms/btpxpress/protocol/openid-connect/certs mp.jwt.verify.issuer=https://security.lions.dev/realms/btpxpress quarkus.smallrye-jwt.enabled=true ``` ### ✅ Vérifications - ✅ **Même realm** : `btpxpress` - ✅ **Même serveur Keycloak** : `https://security.lions.dev` - ✅ **Client ID frontend** : `btpxpress-frontend` (doit exister dans Keycloak) - ✅ **JWT Validation** : Backend valide les tokens via certificats publics --- ## 3. Communication Client ↔ Serveur ### ✅ Configuration REST Client ```properties btpxpress.api.base-url=http://localhost:8080 quarkus.rest-client."dev.lions.btpxpress.service.BtpXpressApiClient".url=${btpxpress.api.base-url} ``` ### ✅ Endpoints mappés | Client (Interface) | Serveur (Resource) | Endpoint | Status | |-------------------|-------------------|----------|--------| | `BtpXpressApiClient.getChantiers()` | `ChantierResource.getAllChantiers()` | `GET /api/v1/chantiers` | ✅ Existe | | `BtpXpressApiClient.getChantier(id)` | `ChantierResource.getChantierById()` | `GET /api/v1/chantiers/{id}` | ✅ Existe | | `BtpXpressApiClient.getClients()` | `ClientResource.getAllClients()` | `GET /api/v1/clients` | ✅ Existe | | `BtpXpressApiClient.getClient(id)` | `ClientResource.getClientById()` | `GET /api/v1/clients/{id}` | ✅ Existe | ### ✅ CORS Configuration **Serveur** (`application.properties`) : ```properties quarkus.http.cors.origins=${CORS_ORIGINS:http://localhost:3000,http://localhost:5173,http://localhost:8081} ``` ✅ **Port 8081 ajouté** aux origines autorisées **Client** : ```properties quarkus.http.cors.origins=http://localhost:8080,https://security.lions.dev ``` --- ## 4. Ports et URLs | Service | Port | URL | Description | |---------|------|-----|-------------| | Backend | 8080 | http://localhost:8080 | API REST backend | | Client | 8081 | http://localhost:8081 | Application PrimeFaces | | Keycloak | - | https://security.lions.dev | Authentification OIDC | --- ## 5. Dépendances Maven ### ✅ Client (`pom.xml`) - ✅ `quarkus-oidc` - Authentification OIDC - ✅ `quarkus-smallrye-jwt` - Support JWT - ✅ `quarkus-rest-client` - REST Client - ✅ `quarkus-rest-jackson` - Sérialisation JSON - ✅ `quarkus-primefaces` - PrimeFaces integration - ✅ `freya-theme` - Thème PrimeFaces Freya ### ✅ Serveur (vérifié) - ✅ `quarkus-smallrye-jwt` - Validation JWT - ✅ CORS activé avec origine `http://localhost:8081` --- ## 6. Flux d'Authentification ``` ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │ Client │ │ Keycloak │ │ Backend │ │ Port 8081 │ │security.lions│ │ Port 8080 │ └─────────────┘ └──────────────┘ └─────────────┘ │ │ │ │ 1. Accès page protégée │ │────────────────────────────────────────────────►│ │ │ │ │ │ 2. Redirection OIDC │ │◄────────────────────────────────────────────────│ │ │ │ │ 3. Redirect Keycloak │ │ │────────────────────────►│ │ │ │ │ │ 4. Authentification │ │ │ │ │ │ 5. Token JWT │ │ │◄────────────────────────│ │ │ │ │ │ 6. Appel API + Token │ │ │────────────────────────────────────────────────►│ │ │ │ │ │ 7. Validation token │ │ │◄───────────────────────│ │ │ │ │ 8. Réponse API │ │ │◄────────────────────────────────────────────────│ ``` --- ## 7. Points de Vérification Requis ### ⚠️ À vérifier dans Keycloak 1. **Client `btpxpress-frontend` existe** dans le realm `btpxpress` 2. **Redirect URIs** incluent `http://localhost:8081/*` 3. **Web Origins** incluent `http://localhost:8081` 4. **Client Secret** configuré si nécessaire (pour confidential client) ### ⚠️ À tester 1. **Authentification OIDC** : Vérifier la redirection vers Keycloak 2. **Token JWT** : Vérifier l'envoi automatique dans les requêtes REST 3. **CORS** : Vérifier que les requêtes depuis 8081 vers 8080 fonctionnent 4. **Endpoints API** : Tester les appels `GET /api/v1/chantiers` et `/api/v1/clients` --- ## 8. Configuration Complète Validée | Composant | Configuration | Status | |-----------|--------------|--------| | Structure fichiers | Quarkus standard | ✅ | | OIDC Client | `btpxpress-frontend` | ✅ | | OIDC Server | `security.lions.dev` | ✅ | | REST Client | `BtpXpressApiClient` | ✅ | | Services | `ChantierService` | ✅ | | CORS Backend | Port 8081 autorisé | ✅ | | CORS Client | Port 8080 autorisé | ✅ | | Endpoints mappés | Tous vérifiés | ✅ | | Dépendances | Toutes présentes | ✅ | --- ## 🎯 Conclusion **✅ La configuration est complète et correcte** : - Le client PrimeFaces est correctement configuré pour communiquer avec le backend - L'authentification OIDC est configurée avec Keycloak sur `security.lions.dev` - Les endpoints REST sont mappés correctement - Le CORS est configuré pour autoriser la communication bidirectionnelle - Toutes les dépendances nécessaires sont présentes **⚠️ Action requise** : Vérifier dans Keycloak que le client `btpxpress-frontend` existe et est correctement configuré avec les redirect URIs appropriés.