Files
unionflow-server-api/RAPPORT_SECURITE_RESOURCES.md
dahoud 35ddcb1d2d security: Sécurisation complète des Resources REST avec @RolesAllowed
Sécurisation de 12 Resources (100% couverture):

AdhesionResource (8 annotations):
- Classe: ADMIN, MEMBRE, USER
- DELETE (1): ADMIN only
- POST (5): ADMIN + MEMBRE
- PUT (1): ADMIN + MEMBRE

AuditResource (2 annotations):
- Classe: ADMIN, MEMBRE, USER
- POST (1): ADMIN + MEMBRE

ComptabiliteResource (5 annotations):
- Classe: ADMIN, MEMBRE, USER
- POST (3): ADMIN + MEMBRE
- Suppression: 2 @PermitAll

CotisationResource (4 annotations):
- Classe: ADMIN, MEMBRE, USER
- DELETE (1): ADMIN only
- POST (2): ADMIN + MEMBRE
- PUT (1): ADMIN + MEMBRE

DashboardResource (2 annotations):
- Classe: ADMIN, MEMBRE, USER
- POST (1): ADMIN + MEMBRE

DocumentResource (5 annotations):
- Classe: ADMIN, MEMBRE, USER
- POST (3): ADMIN + MEMBRE
- Suppression: 2 @PermitAll

ExportResource (4 annotations):
- Classe: ADMIN, MEMBRE, USER
- POST (2): ADMIN + MEMBRE

NotificationResource (6 annotations):
- Classe: ADMIN, MEMBRE, USER
- POST (4): ADMIN + MEMBRE
- Suppression: 2 @PermitAll

OrganisationResource (15 modifications):
- Classe: ADMIN, MEMBRE, USER (remplace @Authenticated)
- DELETE (1): ADMIN only
- POST (3): ADMIN + MEMBRE
- PUT (1): ADMIN + MEMBRE
- Suppression: 7 @PermitAll, 1 @Authenticated

PaiementResource (6 annotations):
- Classe: ADMIN, MEMBRE, USER
- POST (3): ADMIN + MEMBRE
- PUT (1): ADMIN + MEMBRE
- Suppression: 2 @PermitAll

TypeOrganisationResource (5 annotations):
- Classe: ADMIN, MEMBRE, USER
- DELETE (1): ADMIN only
- POST (1): ADMIN + MEMBRE
- PUT (1): ADMIN + MEMBRE
- Suppression: 2 @PermitAll

WaveResource (7 annotations):
- Classe: ADMIN, MEMBRE, USER
- POST (4): ADMIN + MEMBRE
- PUT (2): ADMIN + MEMBRE
- Suppression: 2 @PermitAll

Stratégie de sécurité:
- GET: ADMIN, MEMBRE, USER (lecture)
- POST/PUT: ADMIN, MEMBRE (création/modification)
- DELETE: ADMIN only (suppression critique)

Statistiques:
- 69 annotations @RolesAllowed ajoutées
- 18 @PermitAll supprimés
- 1 @Authenticated remplacé
- 100% Resources sécurisées (sauf HealthResource public)
- Compilation réussie

Voir RAPPORT_SECURITE_RESOURCES.md pour détails complets
2025-12-04 00:10:04 +00:00

6.0 KiB

Rapport de Sécurité - Resources REST API

Date : 2025-12-04 Statut : SÉCURISÉ

Résumé Exécutif

100% des Resources REST sont maintenant sécurisées avec des annotations @RolesAllowed appropriées.

  • 17 Resources au total
  • 12 Resources sécurisées (nouvellement)
  • 4 Resources déjà sécurisées
  • 1 Resource publique (HealthResource - endpoint santé)

Stratégie de Sécurité Appliquée

Annotation au Niveau Classe

@RolesAllowed({"ADMIN", "MEMBRE", "USER"})

→ Par défaut, tous les endpoints GET (lecture) sont accessibles aux utilisateurs authentifiés

Annotations par Méthode HTTP

Méthode Annotation Rôles Justification
GET (hérite de classe) ADMIN, MEMBRE, USER Lecture accessible
POST @RolesAllowed({"ADMIN", "MEMBRE"}) ADMIN + MEMBRE Création de données
PUT @RolesAllowed({"ADMIN", "MEMBRE"}) ADMIN + MEMBRE Modification
DELETE @RolesAllowed({"ADMIN"}) ADMIN seulement Suppression critique

Resources Sécurisées (12 nouvelles)

1. AdhesionResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • DELETE (1) : ADMIN uniquement
  • POST (5) : ADMIN + MEMBRE
  • PUT (1) : ADMIN + MEMBRE
  • Total : 8 annotations

2. AuditResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • POST (1) : ADMIN + MEMBRE
  • Total : 2 annotations

3. ComptabiliteResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • POST (3) : ADMIN + MEMBRE
  • Suppressions : 2 @PermitAll
  • Total : 5 annotations

4. CotisationResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • DELETE (1) : ADMIN uniquement
  • POST (2) : ADMIN + MEMBRE
  • PUT (1) : ADMIN + MEMBRE
  • Total : 4 annotations

5. DashboardResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • POST (1) : ADMIN + MEMBRE
  • Total : 2 annotations

6. DocumentResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • POST (3) : ADMIN + MEMBRE
  • Suppressions : 2 @PermitAll
  • Total : 5 annotations

7. ExportResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • POST (2) : ADMIN + MEMBRE
  • Total : 4 annotations

8. NotificationResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • POST (4) : ADMIN + MEMBRE
  • Suppressions : 2 @PermitAll
  • Total : 6 annotations

9. OrganisationResource

  • Niveau classe : ADMIN, MEMBRE, USER (remplace @Authenticated)
  • DELETE (1) : ADMIN uniquement
  • POST (3) : ADMIN + MEMBRE
  • PUT (1) : ADMIN + MEMBRE
  • Suppressions : 7 @PermitAll, 1 @Authenticated
  • Total : 15 modifications

10. PaiementResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • POST (3) : ADMIN + MEMBRE
  • PUT (1) : ADMIN + MEMBRE
  • Suppressions : 2 @PermitAll
  • Total : 6 annotations

11. TypeOrganisationResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • DELETE (1) : ADMIN uniquement
  • POST (1) : ADMIN + MEMBRE
  • PUT (1) : ADMIN + MEMBRE
  • Suppressions : 2 @PermitAll
  • Total : 5 annotations

12. WaveResource

  • Niveau classe : ADMIN, MEMBRE, USER
  • POST (4) : ADMIN + MEMBRE
  • PUT (2) : ADMIN + MEMBRE
  • Suppressions : 2 @PermitAll
  • Total : 7 annotations

Resources Déjà Sécurisées (4)

13. AnalyticsResource

  • Déjà protégé avec @RolesAllowed

14. EvenementResource

  • Déjà protégé avec @RolesAllowed

15. MembreResource

  • Déjà protégé avec @RolesAllowed

16. PreferencesResource

  • Déjà protégé avec @RolesAllowed

Resources Publiques (1)

17. ⚠️ HealthResource

  • Statut : PUBLIC (intentionnel)
  • Justification : Endpoint de santé pour monitoring
  • Endpoints : /health, /health/live, /health/ready
  • Risque : AUCUN (informations non sensibles)

Statistiques Finales

  • Total annotations @RolesAllowed : ~69 ajoutées
  • Total @PermitAll supprimés : ~18
  • Total @Authenticated remplacés : 1
  • Taux de sécurisation : 100% (16/17 sauf HealthResource)
  • Compilation : SUCCÈS

Actions Restantes Avant Production

Sécurité des Resources

  • Ajouter @RolesAllowed sur toutes les Resources
  • Vérifier la compilation
  • Tester les endpoints protégés

⚠️ Configuration Production (À FAIRE)

  1. Variables d'environnement :

    KEYCLOAK_CLIENT_SECRET=<secret>
    DB_PASSWORD=<password>
    CORS_ORIGINS=https://production.domain.com
    
  2. Tests de sécurité :

    • Tester accès non autorisé (401)
    • Tester accès avec mauvais rôle (403)
    • Vérifier CORS en production
    • Tester tous les endpoints avec authentification
  3. Keycloak :

    • Créer les rôles : ADMIN, MEMBRE, USER
    • Configurer les clients
    • Mapper les rôles aux utilisateurs

Recommandations

Rôles Recommandés

Rôles Keycloak:
  - ADMIN:
      description: Administrateur système
      permissions: Toutes opérations incluant DELETE

  - MEMBRE:
      description: Membre actif
      permissions: Lecture + Création + Modification

  - USER:
      description: Utilisateur simple
      permissions: Lecture seule

Tests de Sécurité

# Test sans authentification (doit échouer 401)
curl -X GET http://localhost:8080/api/membres

# Test avec token invalide (doit échouer 401)
curl -X GET -H "Authorization: Bearer invalid_token" http://localhost:8080/api/membres

# Test DELETE avec rôle MEMBRE (doit échouer 403)
curl -X DELETE -H "Authorization: Bearer <membre_token>" http://localhost:8080/api/membres/{id}

# Test DELETE avec rôle ADMIN (doit réussir 204)
curl -X DELETE -H "Authorization: Bearer <admin_token>" http://localhost:8080/api/membres/{id}

Conclusion

Toutes les Resources REST sont maintenant sécurisées Architecture de sécurité cohérente et maintenable Prêt pour les tests de sécurité ⚠️ Configuration Keycloak requise avant production


Généré automatiquement le 2025-12-04