Aller au contenu

Documentation API — Module Auth

Préfixe : /api/auth | 35 routes | Mixte (public + protégé)

← Retour à l'index


Table des matières

  1. Authentification de base
  2. 2FA — Double authentification
  3. Mots de passe
  4. Sessions
  5. Tokens
  6. Profil & Paramètres
  7. Sécurité & Administration

Authentification de base

POST /api/auth/connexion

Description : Connexion d'un utilisateur avec email et mot de passe
Permission : PUBLIC
Authentification : Publique
Rate limit : preset auth

Données d'entrée

Champ Type Obligatoire Source Description
email string Oui body Email de l'utilisateur
motDePasse string Oui body Mot de passe

Réponse succès (HTTP 200)

{
  "succes": true,
  "message": "Connexion réussie",
  "donnees": {
    "accessToken": "jwt_access_token",
    "refreshToken": "jwt_refresh_token",
    "utilisateur": {
      "id": "cuid",
      "email": "user@example.com",
      "nom": "Nom",
      "prenom": "Prénom",
      "role": { "code": "AGENT", "niveau": 3 }
    }
  }
}

Codes d'erreur

Code HTTP Signification
DONNEES_INVALIDES 400 Email ou mot de passe manquant/invalide
IDENTIFIANTS_INVALIDES 401 Email ou mot de passe incorrect
COMPTE_BLOQUE 423 Compte verrouillé (trop de tentatives)
EMAIL_NON_VERIFIE 403 Email non vérifié
ERREUR_SERVEUR 500 Erreur technique

Use Case associé : ConnexionUseCase.ts
Cas d'usage métier : Un agent ou administrateur ESM se connecte à l'application.


POST /api/auth/register

Description : Inscription d'un nouvel utilisateur
Permission : PUBLIC
Authentification : Publique
Rate limit : preset register

Données d'entrée

Champ Type Obligatoire Source Description
email string Oui body Email unique
motDePasse string Oui body Mot de passe (min 8 car.)
nom string Oui body Nom de famille
prenom string Oui body Prénom
profilId string Oui body CUID du profil utilisateur
communeCode string Non body Code commune d'affectation

Réponse succès (HTTP 201)

{
  "succes": true,
  "message": "Compte créé. Vérifiez votre email.",
  "donnees": { "idUtilisateur": "cuid" }
}

Codes d'erreur

Code HTTP Signification
DONNEES_INVALIDES 400 Champs manquants ou invalides
EMAIL_DEJA_UTILISE 409 Email déjà enregistré
ERREUR_SERVEUR 500 Erreur technique

Use Case associé : InscrireUtilisateurUseCase.ts
Cas d'usage métier : Création d'un nouveau compte agent ou administrateur.


POST /api/auth/refresh

Description : Rafraîchir le token d'accès avec un refresh token
Permission : PUBLIC
Authentification : Publique

Données d'entrée

Champ Type Obligatoire Source Description
refreshToken string Oui body JWT refresh token valide

Réponse succès (HTTP 200)

{
  "succes": true,
  "donnees": {
    "accessToken": "nouveau_jwt_access_token",
    "refreshToken": "nouveau_refresh_token"
  }
}

Codes d'erreur

Code HTTP Signification
TOKEN_INVALIDE 401 Refresh token invalide ou expiré
TOKEN_REVOQUE 401 Refresh token révoqué
ERREUR_SERVEUR 500 Erreur technique

Use Case associé : RefreshTokenUseCase.ts


POST /api/auth/verify-email

Description : Vérifier l'email avec un code reçu par email
Permission : PUBLIC
Authentification : Publique

Données d'entrée

Champ Type Obligatoire Source Description
code string Oui body Code de vérification (6 chiffres)
email string Oui body Email à vérifier

Réponse succès (HTTP 200)

{ "succes": true, "message": "Email vérifié avec succès" }

Use Case associé : VerifierEmailUseCase.ts


POST /api/auth/logout

Description : Déconnexion de l'utilisateur (révocation de la session courante)
Permission : AUTH requise
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
sessionId string Non body ID de session spécifique (optionnel)

Réponse succès (HTTP 200)

{ "succes": true, "message": "Déconnexion réussie" }

Use Case associé : DeconnexionUseCase.ts


POST /api/auth/verify-email-change

Description : Valider le changement d'email avec le code envoyé au nouvel email
Permission : AUTH requise
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
code string Oui body Code de vérification reçu
nouvelEmail string Oui body Nouvel email à confirmer

Use Case associé : VerifierNouvelEmailUseCase.ts


POST /api/auth/change-email

Description : Demander un changement d'email (envoie un code au nouvel email)
Permission : AUTH requise
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
nouvelEmail string Oui body Nouvel email souhaité
motDePasse string Oui body Confirmation par mot de passe actuel

Use Case associé : ChangerEmailUseCase.ts


2FA — Double authentification

POST /api/auth/2fa/generate-secret

Description : Générer un secret TOTP et un QR code pour configurer l'app 2FA
Permission : AUTH requise
Authentification : Requise

Réponse succès (HTTP 200)

{
  "succes": true,
  "donnees": {
    "secret": "BASE32SECRET",
    "qrCode": "data:image/png;base64,...",
    "otpAuthUrl": "otpauth://totp/ESM:user@email.com?secret=..."
  }
}

Use Case associé : Generer2FASecretUseCase.ts


POST /api/auth/2fa/activate

Description : Activer le 2FA en vérifiant le premier code TOTP
Permission : AUTH requise
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
code string Oui body Code TOTP de l'app authenticator
secret string Oui body Secret généré à l'étape précédente

Use Case associé : Activer2FAUseCase.ts


POST /api/auth/2fa/verify

Description : Vérifier un code 2FA lors de la connexion
Permission : PUBLIC
Authentification : Publique
Rate limit : preset twoFactor

Données d'entrée

Champ Type Obligatoire Source Description
code string Oui body Code TOTP 6 chiffres
tempToken string Oui body Token temporaire obtenu après connexion partielle

Réponse succès (HTTP 200)

{
  "succes": true,
  "donnees": {
    "accessToken": "jwt_access_token",
    "refreshToken": "jwt_refresh_token"
  }
}

Use Case associé : Verifier2FAUseCase.ts
Cas d'usage métier : Deuxième étape du flow de connexion pour les comptes 2FA activé.


POST /api/auth/2fa/deactivate

Description : Désactiver le 2FA (confirmation par code TOTP)
Permission : AUTH requise
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
code string Oui body Code TOTP actuel pour confirmer

Use Case associé : Desactiver2FAUseCase.ts


POST /api/auth/2fa/backup-codes/generate

Description : Générer des codes de récupération (backup codes) pour le 2FA
Permission : AUTH requise
Authentification : Requise

Réponse succès (HTTP 200)

{
  "succes": true,
  "donnees": {
    "codes": ["CODE1", "CODE2", "CODE3", "CODE4", "CODE5",
              "CODE6", "CODE7", "CODE8", "CODE9", "CODE10"]
  }
}

Use Case associé : GenererBackupCodesUseCase.ts
Note : À afficher UNE SEULE FOIS — les codes sont hashés en base.


POST /api/auth/2fa/backup-codes/verify

Description : Vérifier un code de récupération (alternative au TOTP)
Permission : PUBLIC
Authentification : Publique
Rate limit : preset twoFactor

Données d'entrée

Champ Type Obligatoire Source Description
code string Oui body Code de récupération (format XXXX-XXXX)
tempToken string Oui body Token temporaire post-connexion

Use Case associé : VerifierBackupCodeUseCase.ts


POST /api/auth/2fa/backup-codes/revoke

Description : Révoquer tous les codes de récupération existants
Permission : AUTH requise
Authentification : Requise

Use Case associé : RevoquerCodesRecuperationUseCase.ts


Mots de passe

PUT /api/auth/change-password

Description : Changer le mot de passe (utilisateur connecté)
Permission : AUTH requise
Authentification : Requise
Rate limit : preset auth

Données d'entrée

Champ Type Obligatoire Source Description
motDePasseActuel string Oui body Mot de passe actuel
nouveauMotDePasse string Oui body Nouveau mot de passe
confirmation string Oui body Confirmation du nouveau mot de passe

Use Case associé : ChangerMotDePasseUseCase.ts


POST /api/auth/reset-password/request

Description : Demander une réinitialisation de mot de passe par email
Permission : PUBLIC
Authentification : Publique
Rate limit : preset passwordReset

Données d'entrée

Champ Type Obligatoire Source Description
email string Oui body Email du compte

Réponse succès (HTTP 200)

{ "succes": true, "message": "Email de réinitialisation envoyé si le compte existe" }

Use Case associé : DemanderResetPasswordUseCase.ts


POST /api/auth/reset-password/verify

Description : Vérifier la validité d'un token de reset
Permission : PUBLIC
Authentification : Publique

Données d'entrée

Champ Type Obligatoire Source Description
token string Oui body Token de réinitialisation reçu par email

Use Case associé : VerifierTokenResetUseCase.ts


POST /api/auth/reset-password/confirm

Description : Confirmer et effectuer la réinitialisation du mot de passe
Permission : PUBLIC
Authentification : Publique
Rate limit : preset passwordReset

Données d'entrée

Champ Type Obligatoire Source Description
token string Oui body Token de réinitialisation
nouveauMotDePasse string Oui body Nouveau mot de passe
confirmation string Oui body Confirmation

Use Case associé : ResetPasswordUseCase.ts


Sessions

GET /api/auth/sessions

Description : Lister toutes les sessions actives de l'utilisateur connecté
Permission : AUTH requise
Authentification : Requise

Réponse succès (HTTP 200)

{
  "succes": true,
  "donnees": {
    "sessions": [
      {
        "id": "cuid",
        "ipAddress": "192.168.1.1",
        "userAgent": "Mozilla/5.0...",
        "createdAt": "2026-06-17T00:00:00Z",
        "lastActivity": "2026-06-17T00:00:00Z",
        "isCurrent": true
      }
    ]
  }
}

Use Case associé : ListerSessionsActivesUseCase.ts


GET /api/auth/sessions/events

Description : Obtenir l'historique des événements de session
Permission : AUTH requise
Authentification : Requise

Paramètres query

Champ Type Obligatoire Description
page number Non Numéro de page
limite number Non Nombre par page

Use Case associé : ObtenirHistoriqueUseCase.ts


DELETE /api/auth/sessions/:idSession

Description : Révoquer une session spécifique
Permission : AUTH requise
Authentification : Requise

Paramètres URL

Champ Type Obligatoire Description
idSession string (CUID) Oui ID de la session à révoquer

Use Case associé : RevoquerSessionUseCase.ts


POST /api/auth/sessions/revoke-all

Description : Révoquer toutes les sessions (déconnexion tous appareils)
Permission : AUTH requise
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Description
garderSessionActuelle boolean Non Garder la session courante (défaut: false)

Use Case associé : RevoquerToutesSessionsUseCase.ts


Tokens

POST /api/auth/tokens/validate

Description : Valider un access token (utile pour les services internes)
Permission : PUBLIC
Authentification : Publique

Données d'entrée

Champ Type Obligatoire Source Description
token string Oui body JWT access token à valider

Réponse succès (HTTP 200)

{
  "succes": true,
  "donnees": {
    "valide": true,
    "payload": { "idUtilisateur": "cuid", "email": "...", "role": {...} }
  }
}

Use Case associé : ValiderAccessTokenUseCase.ts


POST /api/auth/tokens/revoke

Description : Révoquer un token spécifique
Permission : AUTH requise
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
token string Oui body Token à révoquer

Use Case associé : RevoquerTokenUseCase.ts


POST /api/auth/tokens/revoke-all

Description : Révoquer tous les tokens de l'utilisateur connecté
Permission : AUTH requise
Authentification : Requise

Use Case associé : RevoquerTousTokensUseCase.ts


Profil & Paramètres

GET /api/auth/profile

Description : Obtenir le profil complet de l'utilisateur connecté
Permission : AUTH requise
Authentification : Requise

Réponse succès (HTTP 200)

{
  "succes": true,
  "donnees": {
    "id": "cuid",
    "email": "user@example.com",
    "nom": "Nom",
    "prenom": "Prénom",
    "emailVerifie": true,
    "deuxFacteursActive": false,
    "profil": { "code": "AGENT", "libelle": "Agent de terrain" },
    "commune": { "code": "COT", "nom": "Cotonou" },
    "createdAt": "2026-01-01T00:00:00Z"
  }
}

Use Case associé : ObtenirProfilUseCase.ts


PUT /api/auth/profile

Description : Modifier le profil de l'utilisateur connecté
Permission : AUTH requise
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
nom string Non body Nouveau nom
prenom string Non body Nouveau prénom
emailNotifications boolean Non body Activer les notifications email

Use Case associé : ModifierProfilUseCase.ts


GET /api/auth/parametres/:idUtilisateur

Description : Obtenir les paramètres de sécurité d'un utilisateur
Permission : AUTH requise
Authentification : Requise

Paramètres URL

Champ Type Obligatoire Description
idUtilisateur string (CUID) Oui ID de l'utilisateur

Use Case associé : ObtenirParametresUseCase.ts


DELETE /api/auth/delete-account

Description : Supprimer définitivement le compte utilisateur
Permission : AUTH requise
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
motDePasse string Oui body Confirmation par mot de passe
confirmation string Oui body Texte "SUPPRIMER" pour confirmer

Use Case associé : SupprimerCompteUseCase.ts


GET /api/auth/history

Description : Obtenir l'historique d'activité de l'utilisateur
Permission : AUTH requise
Authentification : Requise

Paramètres query

Champ Type Description
page number Numéro de page
limite number Nombre par page

Use Case associé : ObtenirHistoriqueUseCase.ts


Sécurité & Administration

Ces routes nécessitent un niveau de rôle ≤ 2 (administrateurs).

POST /api/auth/security/block-ip

Description : Bloquer une adresse IP (blacklist Redis)
Permission : AUTH requise + niveau rôle ≤ 2
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
ipAddress string Oui body Adresse IP à bloquer (IPv4 ou IPv6)
raison string Non body Raison du blocage
dureeMinutes number Non body Durée du blocage (0 = permanent)

Use Case associé : BloquerIPUseCase.ts


POST /api/auth/security/unblock-ip

Description : Débloquer une adresse IP
Permission : AUTH requise + niveau rôle ≤ 2
Authentification : Requise

Données d'entrée

Champ Type Obligatoire Source Description
ipAddress string Oui body Adresse IP à débloquer

Use Case associé : DebloquerIPUseCase.ts


GET /api/auth/security/logs

Description : Obtenir les logs de sécurité (connexions, blocages, tentatives)
Permission : AUTH requise + niveau rôle ≤ 2
Authentification : Requise

Paramètres query

Champ Type Description
page number Numéro de page
limite number Nombre par page
ipAddress string Filtrer par IP
dateDebut string (ISO) Date de début
dateFin string (ISO) Date de fin

Use Case associé : ObtenirLogsSecuriteUseCase.ts


GET /api/auth/security/suspicious-connections

Description : Détecter les connexions suspectes (IPs multiples, horaires inhabituels)
Permission : AUTH requise + niveau rôle ≤ 2
Authentification : Requise

Use Case associé : DetecterConnexionsSuspectesUseCase.ts