# Configuration Keycloak Resource Server pour UnionFlow ## Problème Identifié Le client "unionflow-server" n'est pas configuré comme Resource Server dans Keycloak, causant des erreurs 403 avec le Policy Enforcer. ## Solution : Configuration du Resource Server ### 1. Accéder à Keycloak Admin Console - URL: http://localhost:8180/admin - Realm: unionflow - Client: unionflow-server ### 2. Activer Authorization Services 1. Aller dans **Clients** → **unionflow-server** 2. Dans l'onglet **Settings**: - **Authorization Enabled**: ON - **Service Accounts Enabled**: ON - **Standard Flow Enabled**: ON 3. Cliquer **Save** ### 3. Configurer les Resources Dans l'onglet **Authorization** → **Resources**, créer: #### Resource: evenements-api - **Name**: evenements-api - **Display Name**: API Événements - **URI**: /api/evenements/* - **Scopes**: read, write, delete #### Resource: membres-api - **Name**: membres-api - **Display Name**: API Membres - **URI**: /api/membres/* - **Scopes**: read, write, delete #### Resource: cotisations-api - **Name**: cotisations-api - **Display Name**: API Cotisations - **URI**: /api/cotisations/* - **Scopes**: read, write, delete ### 4. Configurer les Scopes Dans **Authorization** → **Authorization Scopes**: - **read**: Lecture des données - **write**: Écriture des données - **delete**: Suppression des données ### 5. Configurer les Policies Dans **Authorization** → **Policies**: #### Policy: Admin Policy - **Type**: Role Based - **Name**: admin-policy - **Roles**: ADMIN, PRESIDENT #### Policy: Member Policy - **Type**: Role Based - **Name**: member-policy - **Roles**: MEMBRE, SECRETAIRE, TRESORIER ### 6. Configurer les Permissions Dans **Authorization** → **Permissions**: #### Permission: Événements Full Access - **Name**: evenements-full-access - **Resource**: evenements-api - **Scopes**: read, write, delete - **Policies**: admin-policy #### Permission: Événements Read Access - **Name**: evenements-read-access - **Resource**: evenements-api - **Scopes**: read - **Policies**: member-policy ### 7. Vérifier la Configuration 1. Dans **Authorization** → **Evaluate**, tester avec différents utilisateurs 2. Vérifier que les tokens contiennent les bonnes permissions ## Configuration Application Properties ```properties # Policy Enforcer en mode PERMISSIVE pour développement %dev.quarkus.keycloak.policy-enforcer.enable=true %dev.quarkus.keycloak.policy-enforcer.lazy-load-paths=true %dev.quarkus.keycloak.policy-enforcer.enforcement-mode=PERMISSIVE # Une fois configuré, passer en ENFORCING %prod.quarkus.keycloak.policy-enforcer.enforcement-mode=ENFORCING ``` ## Test de Validation ```bash # 1. Obtenir un token curl -X POST "http://localhost:8180/realms/unionflow/protocol/openid-connect/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=password&username=admin@unionflow.dev&password=admin123&client_id=unionflow-server&client_secret=unionflow-secret-2025" # 2. Tester l'API avec le token curl -H "Authorization: Bearer " "http://localhost:8080/api/evenements/publics" ``` ## Résultat Attendu - ✅ Plus d'erreurs "invalid_clientId" - ✅ API accessible avec authentification - ✅ Permissions basées sur les rôles fonctionnelles