Déploiement
Déploiement • Chapitre 9 : Configuration HTTPS et sécurité

Configuration du CORS

Le Cross-Origin Resource Sharing (CORS) est le mécanisme de défense des navigateurs contre le vol de données entre domaines. Configurez votre API pour n'autoriser strictement que les origines légitimes de votre frontend.

🛑
Same-Origin Policy

Politique de sécurité native du navigateur bloquant par défaut les requêtes entre domaines distincts.

🎯
Origine Restreinte

Bannir origin: '*' en production et restreindre aux seuls domaines de confiance.

🍪
Credentials & Cookies

Obligation d'activer credentials: true pour permettre le passage des cookies de session.

🔀
Requêtes Preflight

Gestion obligatoire de la méthode HTTP OPTIONS émise par le navigateur avant les requêtes complexes.

cors-production-config.ts
import express from 'express';
import cors, { CorsOptions } from 'cors';

const app = express();

// 1. Liste blanche des domaines autorisés à interroger l'API en production
const whitelist = [
  'https://mon-site.com',
  'https://www.mon-site.com',
  'https://admin.mon-site.com'
];

const corsOptions: CorsOptions = {
  origin: (origin, callback) => {
    // Autoriser les requêtes sans origine (comme les applications mobiles ou curl)
    if (!origin || whitelist.indexOf(origin) !== -1) {
      callback(null, true);
    } else {
      callback(new Error('Bloqué par la politique CORS en production'));
    }
  },
  credentials: true, // Autorise l'envoi des cookies sécurisés et headers d'authentification
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'],
  maxAge: 86400 // Met en cache le résultat du preflight pendant 24h
};

// 2. Appliquer le middleware CORS à toutes les routes API
app.use(cors(corsOptions));

Guide Approfondi & Architecture Système

1. Le Grand Malentendu : Le CORS ne protège PAS l'API, il protège l'Utilisateur !

C'est l'erreur conceptuelle numéro un :
Qui applique le CORS ? C'est le navigateur du client, JAMAIS le serveur ! Si vous faites un curl ou utilisez Postman, le CORS ne s'applique pas. Le CORS existe pour empêcher un site pirate malveillant.com sur lequel l'internaute surfe d'émettre une requête AJAX discrète vers votre-banque.com/api/virement en utilisant les cookies stockés dans son navigateur.

2. Pourquoi le joker 'Access-Control-Allow-Origin: *' est interdit avec des Cookies

Si votre application utilise des sessions ou des cookies sécurisés :

Les spécifications W3C interdisent formellement d'utiliser * si credentials: true est activé. Le navigateur rejettera immédiatement la réponse. Vous devez impérativement renvoyer l'origine exacte du client dans l'en-tête de réponse.

Tableau des En-têtes HTTP Fondamentaux du Protocole CORS

En-tête HTTPRôleExemple de Valeur en Production
Access-Control-Allow-OriginDéfinit quel domaine a le droit de lire la réponsehttps://mon-site.com (Jamais * en prod sécurisée)
Access-Control-Allow-CredentialsAutorise le passage des cookies et jetons d'authentificationtrue
Access-Control-Allow-MethodsListe les verbes HTTP autorisés pour cette routeGET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-HeadersListe les en-têtes personnalisés acceptésContent-Type, Authorization
Access-Control-Max-AgeDurée de mise en cache du preflight OPTIONS en secondes86400 (24 heures)