Middleware & Sécurité

CORS

Configuration de base

.middleware(|m| {
    m.with_cors(|c| {
        c.origin("https://app.example.com")
         .origin("https://www.example.com")
    })
})

Autoriser toutes les origines

m.with_cors(|c| c.any_origin())

Génère Access-Control-Allow-Origin: *. À n'utiliser que pour les APIs entièrement publiques et en lecture seule.


Avec credentials

Les cookies et l'en-tête Authorization nécessitent un opt-in explicite :

m.with_cors(|c| {
    c.origin("https://app.example.com")
     .allow_credentials(true)
})

Contrainte de sécurité : any_origin() et .allow_credentials(true) ne peuvent pas être combinés. Runique rejette cette configuration au démarrage avec un BuildError.


Durée du cache preflight

m.with_cors(|c| {
    c.origin("https://app.example.com")
     .max_age(3600)  // secondes, défaut : 3600
})

Webhooks Stripe / services tiers

Stripe et les services similaires envoient leurs POST directement depuis leurs serveurs — pas depuis un navigateur. CORS ne s'applique pas aux appels serveur-à-serveur. Pour les webhooks Stripe, utilisez .csrf_exempt() (et vérifiez l'en-tête Stripe-Signature dans votre handler).