Aller au contenu

PD-238 — Revue de spécification & tests

1. Synthèse exécutive

  • Verdict global : RÉSERVE
  • Écarts identifiés :
  • Ambiguïtés : 4
  • Contradictions : 0
  • Non-testables : 2
  • Incohérences spec ↔ tests : 2
  • Hypothèses dangereuses : 1
  • Risques sécurité/conformité : 2

2. Écarts détaillés

ECT-01

  • Catégorie : Ambiguïté
  • Localisation : Spec §2 (Périmètre), §5 F-238-06, §6 (Cas d'erreur)
  • Description : Le besoin d’authentification JWT pour POST /auth/reauth n’est pas défini. La spec impose le JWT pour /user/mfa/* uniquement, sans règle explicite pour /auth/reauth.
  • Sévérité : Majeur
  • Recommandation : Clarifier si /auth/reauth exige un JWT valide et le code d’erreur associé en cas d’absence.

ECT-02

  • Catégorie : Ambiguïté
  • Localisation : Spec §3 (Définitions), INV-238-03, CA-238-06
  • Description : La valeur attendue de method n’est pas définie (enum, valeurs possibles, casse). La compatibilité PD-106 est invoquée sans précision formelle.
  • Sévérité : Majeur
  • Recommandation : Préciser l’ensemble des valeurs autorisées pour method.

ECT-03

  • Catégorie : Ambiguïté
  • Localisation : Spec §3 (Définitions), INV-238-03, Points à clarifier #3
  • Description : Le format de configuredAt n’est pas spécifié (ISO 8601, epoch, timezone). Les tests vérifient uniquement la présence du champ.
  • Sévérité : Mineur
  • Recommandation : Fixer le format attendu et la timezone (ex. ISO 8601 UTC) pour rendre la vérification stricte.

ECT-04

  • Catégorie : Ambiguïté / Non-testable
  • Localisation : Spec §3 (Définitions), INV-238-04, Points à clarifier #2
  • Description : Le TTL/validité de qrCodeUri (expiresAt) est mentionné mais non défini. La vérification de conformité temporelle reste non testable sans valeur contractuelle.
  • Sévérité : Mineur
  • Recommandation : Contractualiser la durée ou déclarer explicitement la dépendance Keycloak comme hors périmètre testable.

ECT-05

  • Catégorie : Incohérence spec ↔ tests
  • Localisation : Tests §2 Matrice de couverture (INV-238-02 ↔ CA-238-03)
  • Description : La matrice associe INV-238-02 (accès croisé) à CA-238-03 (JWT manquant sur /totp/verify). Les exigences ne correspondent pas.
  • Sévérité : Mineur
  • Recommandation : Corriger l’association dans la matrice pour refléter l’exigence d’accès croisé.

ECT-06

  • Catégorie : Incohérence spec ↔ tests
  • Localisation : Tests §2 Matrice de couverture (INV-238-13 ↔ CA-238-13)
  • Description : INV-238-13 concerne les erreurs explicites sans effet partiel, alors que CA-238-13 concerne le rate limiting. Le mapping est incohérent.
  • Sévérité : Mineur
  • Recommandation : Corriger la matrice (INV-238-13 doit pointer vers TC-INV-01/TC-ERR-12, pas CA-238-13).

ECT-07

  • Catégorie : Non-testable
  • Localisation : Spec §6 (Cas d'erreur), F-238-06, Tests §4/§5
  • Description : Aucun comportement d’erreur n’est défini pour /auth/reauth en cas de mot de passe invalide (code ERR-238-*). Les tests ne peuvent pas vérifier l’erreur contractuelle.
  • Sévérité : Majeur
  • Recommandation : Définir le code d’erreur et le comportement attendu pour l’échec de reauth.

ECT-08

  • Catégorie : Hypothèse dangereuse
  • Localisation : Spec §9 H-238-02, §4 INV-238-02
  • Description : L’isolation d’accès repose sur l’identification correcte de l’utilisateur via claims OIDC. En cas de désalignement entre JWT et mapping Keycloak Admin API, un accès croisé devient possible.
  • Sévérité : Majeur
  • Recommandation : Exiger explicitement la vérification de cohérence entre sub JWT et l’identifiant Keycloak utilisé pour les opérations MFA.

ECT-09

  • Catégorie : Risque sécurité/conformité
  • Localisation : Spec §4 INV-238-09, Tests TC-INV-02, Observabilité
  • Description : Le contrôle “pas de logs de secrets” dépend de la capacité à auditer tous les canaux de logs (app, proxy, middleware). La surface exacte d’audit n’est pas contractualisée.
  • Sévérité : Mineur
  • Recommandation : Définir explicitement les surfaces de logs auditables pour la conformité (app, reverse proxy, APM, etc.).

ECT-10

  • Catégorie : Risque sécurité/conformité
  • Localisation : Spec §4 INV-238-12, §6 (Cas d’erreur)
  • Description : Le format d’erreur pour reauth invalide est défini, mais la validation du token n’exige pas explicitement la vérification des claims sub et purpose côté backend (seulement défini dans la définition, pas en règle d’acceptation).
  • Sévérité : Majeur
  • Recommandation : Ajouter une exigence testable sur la validation stricte des claims sub et purpose pour l’acceptation du reauth token.

3. Points forts

  • Couverture des flux nominaux et cas d’erreur largement exhaustive.
  • Invariants bien mappés à des scénarios de test dédiés.
  • Séparation claire des responsabilités PD-27 (validation) vs PD-238 (gestion).

4. Recommandations générales

  • Rendre explicites les formats contractuels (enum method, formats timestamp).
  • Aligner la matrice de couverture avec les invariants réels.
  • Contractualiser les erreurs de /auth/reauth pour assurer testabilité complète.
  • Clarifier la surface d’audit des logs et la cohérence d’identité JWT ↔ Keycloak.