Authentification
Statut
Document de cadrage sécurité — version initiale.
Objectif
L'authentification doit établir de manière fiable qui appelle l'écosystème DMV : utilisateur, administrateur, acteur rattaché, mairie, association ou device PlayLoop.
Elle doit rester séparée de l'autorisation, qui décide ensuite ce que l'identité authentifiée peut faire.
État actuel visible
Le code montre :
- Laravel Sanctum dans l'API ;
- une configuration
SANCTUM_TOKEN_EXPIRATION; - un service
SupabaseTokenServicequi valide les JWT Supabase avecfirebase/php-jwt; - une exigence de secret
SUPABASE_JWT_SECRETpour valider les tokens Supabase ; - un contrôle du rôle JWT Supabase
authenticated; - des usages Supabase Auth côté frontends ;
- un middleware PlayLoop qui lit
Authorization: Bearer {token}pour authentifier un device ; - des routes protégées par
auth:sanctumdans les modules backend.
Sources d'identité
| Source | État | Rôle |
|---|---|---|
| Supabase Auth | Visible côté frontends et validation JWT côté API | Authentification historique ou actuelle à rationaliser. |
| Laravel Sanctum | Visible côté API | Protection des routes API et tokens applicatifs. |
| Token device PlayLoop | Visible côté backend | Authentification de terminaux d'affichage. |
| Stripe | Visible pour webhooks | Authentification par signature webhook, pas par session utilisateur. |
Principes
- Ne jamais considérer le frontend comme source de vérité des droits.
- Ne pas confondre le rôle Supabase
authenticatedavec un rôle métier DMV. - Refuser les tokens expirés, invalides ou signés avec un secret inconnu.
- Ne jamais exposer
SUPABASE_JWT_SECRET,STRIPE_SECRETouSTRIPE_WEBHOOK_SECRET. - Prévoir une révocation claire des tokens utilisateurs et devices.
- Utiliser des réponses JSON cohérentes pour les erreurs d'authentification.
Flux cible
La cible doit clarifier le flux d'authentification principal :
- L'utilisateur s'authentifie via le frontend autorisé.
- Le backend vérifie ou échange le token d'identité.
- L'API associe l'identité à un profil applicatif DMV.
- Les routes protégées utilisent une authentification backend contrôlée.
- Les autorisations métier sont évaluées séparément.
Ce flux reste à stabiliser précisément entre Supabase Auth et Sanctum.
Authentification PlayLoop
PlayLoop utilise un besoin différent : authentifier un écran ou device, pas seulement un utilisateur.
Le middleware visible :
- lit un bearer token ;
- valide le token via un service dédié ;
- refuse les tokens manquants, invalides ou révoqués ;
- injecte le device dans la requête si la validation réussit.
La cible doit documenter le cycle de vie complet : création, affichage initial, rotation, révocation, expiration et remplacement d'un device.
Webhooks Stripe
Le webhook Stripe est public par conception mais protégé par signature.
Le code visible :
- exclut la route webhook de Sanctum et
identify.app; - valide immédiatement la signature Stripe ;
- dispatche ensuite le traitement en queue ;
- revalide la signature dans le job.
Ce modèle est cohérent avec un endpoint webhook public, à condition que le secret webhook soit protégé.
Vision cible
- Choisir et documenter le flux canonique entre Supabase Auth et Sanctum.
- Définir les durées d'expiration selon le type de token.
- Ajouter une stratégie de révocation et rotation.
- Encadrer les sessions administratives plus strictement que les sessions publiques.
- Étudier une authentification renforcée pour les comptes sensibles.
Points à clarifier
- Source d'authentification officielle à long terme.
- Format et durée des tokens émis par l'API.
- Politique MFA pour admins, mairies et comptes sensibles.
- Gestion des sessions multi-applications.
- Procédure de révocation d'urgence.