Passer au contenu principal

Aperçu

L’API d’authentification gère l’inscription, la connexion, la gestion des sessions, la vérification des e-mails et la réinitialisation des mots de passe. Toutes les authentifications utilisent des cookies HTTP-only sécurisés pour la gestion de session avec des tokens JWT.

Flux d’authentification

Endpoints

Inscrire un nouvel utilisateur

POST
endpoint
/auth/register
Crée un nouveau compte utilisateur. Un lien de vérification d’e-mail sera envoyé à l’adresse fournie. Corps de la requête :
{
  "email": "[email protected]",
  "name": "John Doe",
  "password": "SecurePassword123!"
}
email
string
requis
Adresse e-mail valide
name
string
requis
Nom complet (minimum 2 caractères)
password
string
requis
Mot de passe fort (minimum 8 caractères)
Réponse :
{
  "success": true,
  "message": "Registration successful. Please check your email to verify your account.",
  "user": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "[email protected]",
    "name": "John Doe",
    "emailVerified": false,
    "createdAt": "2024-01-17T10:30:00Z"
  }
}
Les utilisateurs doivent vérifier leur e-mail avant de pouvoir accéder pleinement à la plateforme.

Connexion

POST
endpoint
/auth/login
Authentifie un utilisateur et établit une session. Corps de la requête :
{
  "email": "[email protected]",
  "password": "SecurePassword123!"
}
email
string
requis
Adresse e-mail de l’utilisateur
password
string
requis
Mot de passe de l’utilisateur
Réponse :
{
  "success": true,
  "message": "Login successful",
  "user": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "[email protected]",
    "name": "John Doe",
    "role": "USER",
    "emailVerified": true
  }
}
Cookies définis :
  • accessToken - HTTP-only, Secure, SameSite=Strict (15 minutes)
  • refreshToken - HTTP-only, Secure, SameSite=Strict (7 jours)

Récupérer l’utilisateur courant

GET
endpoint
/auth/me
Récupère les informations de l’utilisateur actuellement authentifié. En-têtes :
Cookie: accessToken=...
Réponse :
{
  "user": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "[email protected]",
    "name": "John Doe",
    "role": "USER",
    "emailVerified": true,
    "createdAt": "2024-01-17T10:30:00Z"
  }
}

Rafraîchir le token d’accès

POST
endpoint
/auth/refresh
Obtient un nouveau token d’accès à l’aide du refresh token. En-têtes :
Cookie: refreshToken=...
Réponse :
{
  "ok": true,
  "user": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "[email protected]",
    "name": "John Doe",
    "role": "USER"
  }
}
Cookies mis à jour :
  • Nouveau accessToken émis
  • refreshToken renouvelé pour la sécurité

Déconnexion

POST
endpoint
/auth/logout
Met fin à la session de l’utilisateur et invalide les tokens. En-têtes :
Cookie: accessToken=...
Réponse :
{
  "success": true,
  "message": "Logged out successfully"
}
Cookies supprimés :
  • accessToken supprimé
  • refreshToken supprimé

Vérifier l’adresse e-mail

POST
endpoint
/auth/verify-email
Vérifie l’adresse e-mail d’un utilisateur à l’aide du token envoyé par e-mail. Corps de la requête :
{
  "token": "verification_token_from_email"
}
token
string
requis
Token de vérification d’e-mail
Réponse :
{
  "success": true,
  "message": "Email verified successfully. You can now log in."
}

Renvoyer l’e-mail de vérification

POST
endpoint
/auth/send-email-verification
Demande un nouvel e-mail de vérification si le précédent a expiré ou a été perdu. Corps de la requête :
{
  "email": "[email protected]"
}
email
string
requis
Adresse e-mail de l’utilisateur
Réponse :
{
  "success": true,
  "message": "Verification email sent. Please check your inbox."
}
Limitation de débit : Cet endpoint est limité pour éviter les abus :
  • 5 requêtes par heure par adresse e-mail

Mot de passe oublié

POST
endpoint
/auth/forgot-password
Demande un lien de réinitialisation du mot de passe par e-mail. Corps de la requête :
{
  "email": "[email protected]"
}
email
string
requis
Adresse e-mail de l’utilisateur
Réponse :
{
  "success": true,
  "message": "If an account exists with this email, a password reset link has been sent."
}
Pour des raisons de sécurité, l’API renvoie toujours un message de succès, qu’un e-mail existe ou non.

Réinitialiser le mot de passe

POST
endpoint
/auth/reset-password
Réinitialise le mot de passe à l’aide du token reçu par e-mail. Corps de la requête :
{
  "token": "reset_token_from_email",
  "password": "NewSecurePassword123!"
}
token
string
requis
Token de réinitialisation du mot de passe reçu par e-mail
password
string
requis
Nouveau mot de passe (minimum 8 caractères)
Réponse :
{
  "success": true,
  "message": "Password reset successful. You can now log in with your new password."
}

Fonctions de sécurité

Cookies HTTP-only

Tous les tokens de session sont stockés dans des cookies HTTP-only pour éviter les attaques XSS. JavaScript ne peut pas accéder à ces cookies.

Attribut Secure

Les cookies sont marqués Secure, garantissant qu’ils ne sont transmis qu’en HTTPS en production.

Politique SameSite

Les cookies utilisent SameSite=Strict pour prévenir les attaques CSRF.

Rotation des tokens

Les refresh tokens sont renouvelés à chaque utilisation pour réduire les risques si un token est compromis.

Exigences de mot de passe

  • Minimum 8 caractères
  • Recommandé : mélange de majuscules, minuscules, chiffres et caractères spéciaux

Expiration des tokens

  • Access Token : 15 minutes
  • Refresh Token : 7 jours
  • Verification Token : 24 heures
  • Reset Token : 1 heure

Codes d’erreur

CodeStatutDescription
INVALID_CREDENTIALS401E-mail ou mot de passe incorrect
EMAIL_ALREADY_EXISTS409L’e-mail est déjà enregistré
EMAIL_NOT_VERIFIED403Vérification d’e-mail requise
INVALID_TOKEN400Token invalide ou expiré
TOKEN_EXPIRED401Token expiré
WEAK_PASSWORD400Le mot de passe ne répond pas aux exigences
RATE_LIMIT_EXCEEDED429Trop de requêtes

Cas d’usage

Exemple 1 : Flux complet d’inscription

# Étape 1 : Inscription
curl -X POST "https://api.steerai.autos/v1/auth/register" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "name": "Auto Dealer",
    "password": "SecurePass123!"
  }'

# Étape 2 : L'utilisateur reçoit l'e-mail et vérifie
curl -X POST "https://api.steerai.autos/v1/auth/verify-email" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "verification_token_from_email"
  }'

# Étape 3 : Connexion
curl -X POST "https://api.steerai.autos/v1/auth/login" \
  -H "Content-Type: application/json" \
  -c cookies.txt \
  -d '{
    "email": "[email protected]",
    "password": "SecurePass123!"
  }'

Exemple 2 : Flux de réinitialisation du mot de passe

# Étape 1 : Demande de réinitialisation
curl -X POST "https://api.steerai.autos/v1/auth/forgot-password" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]"
  }'

# Étape 2 : Réinitialisation avec le token de l'e-mail
curl -X POST "https://api.steerai.autos/v1/auth/reset-password" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "reset_token_from_email",
    "password": "NewSecurePass123!"
  }'

Exemple 3 : Rafraîchissement du token

# Rafraîchir le token d'accès avant expiration
curl -X POST "https://api.steerai.autos/v1/auth/refresh" \
  -b cookies.txt \
  -c cookies.txt

Implémentation côté client

JavaScript/Node.js

class AuthClient {
  constructor(baseURL) {
    this.baseURL = baseURL;
  }

  async register(email, name, password) {
    const response = await fetch(`${this.baseURL}/auth/register`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ email, name, password })
    });
    return response.json();
  }

  async login(email, password) {
    const response = await fetch(`${this.baseURL}/auth/login`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      credentials: 'include', // Important for cookies
      body: JSON.stringify({ email, password })
    });
    return response.json();
  }

  async getCurrentUser() {
    const response = await fetch(`${this.baseURL}/auth/me`, {
      credentials: 'include'
    });
    return response.json();
  }

  async logout() {
    const response = await fetch(`${this.baseURL}/auth/logout`, {
      method: 'POST',
      credentials: 'include'
    });
    return response.json();
  }
}

Bonnes pratiques

Ne transmettez jamais les identifiants via des connexions HTTP non sécurisées.
Rafraîchissez automatiquement les tokens avant leur expiration pour maintenir la continuité de session.
Utilisez des cookies HTTP-only (gérés automatiquement par notre API) plutôt que localStorage.
Exigez des mots de passe avec une complexité et une longueur suffisantes.
Protégez les endpoints d’authentification contre les attaques par force brute.
Suivez les tentatives de connexion, les réinitialisations de mot de passe et les activités suspectes.

Ressources associées