Gestion des Comptes
Contexte
Chaque utilisateur doit disposer d'un compte dédié sur la passerelle pour consommer l'API Gateway en autonomie. Ce compte permet de stocker les points de livraison, de gérer les identifiants d'appel et de contrôler la suppression des données.
Objectifs
- Offrir un parcours simple de création de compte après validation du consentement Enedis.
- Associer un ou plusieurs points de livraison (PDL) Linky à un utilisateur.
- Fournir à chaque utilisateur un
client_idfixe et unclient_secretutilisé pour signer les requêtes vers la passerelle. - Permettre la suppression complète du compte ainsi que des données associées.
- Garantir que chaque utilisateur n'accède qu'à ses propres données et ne peut consulter ou modifier les PDL d'un autre compte.
Parcours utilisateur
- L'utilisateur crée un compte passerelle (email, mot de passe).
- Au terme de l'inscription, la passerelle génère un
client_idpermanent et unclient_secretque l'utilisateur doit conserver en sécurité. - L'utilisateur lance le consentement Enedis depuis son tableau de bord (bouton unique, pas de PDL requis).
- Après validation du consentement, tous les PDL du compte Enedis sont automatiquement détectés et ajoutés à la passerelle.
- L'utilisateur peut consulter les détails de chaque PDL (contrat, adresse) via le bouton "Détails".
- L'utilisateur peut consulter ses identifiants d'API à tout moment depuis un espace sécurisé.
- L'utilisateur peut supprimer des PDL individuellement ou son compte complet ; cette action purge également les PDL et toutes les données mises en cache associées.
Critères d'acceptation
- La création de compte est obligatoire avant d'appeler les endpoints de la passerelle.
- Chaque compte dispose d'un
client_idstable et d'unclient_secretvalide pour l'appel des API. - Un utilisateur peut gérer plusieurs PDL à partir d'un même compte.
- La suppression de compte supprime de manière irréversible les données (PDL, cache, identifiants).
- Toute requête API est cloisonnée : un utilisateur ne peut lire ni manipuler les PDL et données d'un autre compte.
API à exposer
- Endpoints de gestion de compte : inscription, authentification, suppression.
- Endpoints de gestion des PDL : ajout, mise à jour, suppression.
- Endpoints de gestion du
client_secret: récupération initiale sécurisée.
Authentification
OAuth2 Client Credentials Flow
L'authentification utilise le standard OAuth2 Client Credentials avec deux méthodes supportées :
-
Bearer Token (recommandée) :
- Obtenir un token via
POST /accounts/tokenavecclient_idetclient_secret - Utiliser le token dans le header
Authorization: Bearer {token} - Le token expire après 30 jours (configurable via
ACCESS_TOKEN_EXPIRE_MINUTES)
- Obtenir un token via
-
Basic Authentication :
- Header
Authorization: Basic {base64(client_id:client_secret)} - Moins sécurisé mais utile pour les tests
- Header
Swagger UI
Le Swagger (/docs) supporte OAuth2 Client Credentials nativement :
- Le endpoint
/accounts/tokenaccepte les credentials en Basic Auth header (format standard Swagger) - Les credentials sont automatiquement parsés du header
Authorization: Basic - Permet de tester tous les endpoints directement depuis l'interface
Rate Limiting
Chaque utilisateur dispose de quotas journaliers :
- Avec cache (défaut,
use_cacheabsent outrue) : 1000 requêtes/jour (configurable viaUSER_DAILY_LIMIT_WITH_CACHE) - Sans cache (
use_cache=falseexplicite) : 50 requêtes/jour vers l'API Enedis (configurable viaUSER_DAILY_LIMIT_NO_CACHE)
Les compteurs sont stockés dans Redis avec TTL jusqu'à minuit UTC.
Administration
Panel Admin
Les administrateurs sont définis via ADMIN_EMAILS (liste d'emails séparés par des virgules).
Fonctionnalités admin :
- Statistiques globales : Nombre d'utilisateurs, PDL, appels API
- Liste des utilisateurs : Email, client_id, nombre de PDL, quotas utilisés
- Reset de quota : Réinitialisation manuelle des compteurs journaliers
- Auto-refresh : Rafraîchissement automatique toutes les 30 secondes
Endpoints admin :
GET /admin/users: Liste tous les utilisateurs avec statsPOST /admin/users/{user_id}/reset-quota: Reset les quotasGET /admin/stats: Statistiques globales
Sécurité :
- Middleware
require_admin()vérifie que l'email est dansADMIN_EMAILS - Retourne 403 Forbidden si non-admin
- Les admins ne peuvent pas accéder aux données Enedis des utilisateurs