Gestion des Cookies et Conformité GDPR dans ASP.NET Core 2.1

Avec l'introduction d'ASP.NET Core 2.1, Microsoft a intégré nativement des fonctionnalités de conformité au RGPD (Règlement Général sur la Protection des Données). Ce changement impacte directement la manière dont les cookies sont gérés dans les applications web, car les modèles de projet par défaut activent désormais une politique stricte de consentement.

Le problème du stockage des cookies

Dans les nouveaux projets ASP.NET Core 2.1+, il arrive fréquemment que les cookies ne soient pas enregistrés sur le navigateur, même après avoir utilisé Response.Cookies.Append. Cela est dû à la configuration par défaut du middleware de politique des cookies qui considère tout cookie comme non essentiel tant que l'utilisateur n'a pas explicitement accepté la politique de confidentialité.

Configuration dans Startup.cs

Dans la méthode ConfigureServices de votre classe Startup, vous trouverez généralement le bloc de configuration suivant :

services.Configure<CookiePolicyOptions>(options =>
{
    // Détermine si le consentement de l'utilisateur est requis pour les cookies non essentiels
    options.CheckConsentNeeded = context => true;
    options.MinimumSameSitePolicy = SameSiteMode.None;
});

Si vous souhaitez désactiver cette restriction et revenir au comportement classique (non recommandé pour les projets destinés au marché européen), il suffit de modifier CheckConsentNeeded à false ou de supprimer ce bloc. Cependant, pour respecter la vie privée, il est préférable de gérer le consentement.

Implémentation du consentement utilisateur

Pour autoriser le stockage des cookies, vous devez fournir un mécanisme permettant à l'utilisateur d'accepter votre politique. Cela passe généralement par une bannière de consentement liée à une action côté serveur.

Voici comment implémenter une action dans un contrôleur pour marquer le consentement de l'utilisateur :

[HttpPost]
public IActionResult ValiderConsentement()
{
    var featureConsentement = HttpContext.Features.Get<ITrackingConsentFeature>();
    if (featureConsentement != null)
    {
        featureConsentement.GrantConsent();
    }
    return Ok(new { success = true });
}

Côté client, vous pouvez utiliser un script JavaScript pour déclencher cette action et stocker la chaîne de caractères de consentement fournie par le système :

(function () {
    const boutonAccepter = document.querySelector("#cookieConsent button[data-cookie-string]");
    if (boutonAccepter) {
        boutonAccepter.addEventListener("click", function (e) {
            // Enregistrement manuel du cookie de consentement
            document.cookie = boutonAccepter.dataset.cookieString;
            
            // Appel API pour confirmer côté serveur si nécessaire
            fetch("/Home/ValiderConsentement", { method: "POST" })
                .then(() => {
                    document.querySelector("#cookieConsent").classList.add("hidden");
                });
        }, false);
    }
})();

Utilisation des Cookies dans ASP.NET Core

Une fois le consentement obtenu, vous pouvez manipuler les cookies via l'objet Response. Contrairement aux anceinnes versions d'ASP.NET, la configuration des attributs se fait via l'objet CookieOptions.

public void CreerCookieExemple()
{
    var options = new CookieOptions
    {
        // Empêche l'accès via JavaScript (protection XSS)
        HttpOnly = true,
        
        // Transmis uniquement via HTTPS
        Secure = true,
        
        // Définit la durée de vie (ex: 7 jours)
        Expires = DateTime.Now.AddDays(7)
    };

    Response.Cookies.Append("IdentifiantSession", Guid.NewGuid().ToString(), options);
}

L'option IsEssential

Si un cookie est strictement nécessaire au fonctionnement technique de votre site (comme un panier d'achat ou un jeton d'authentification), vous pouvez contourner la vérification du consentement en utilisant la propriété IsEssential :

Response.Cookies.Append("CleCritique", "Valeur", new CookieOptions 
{ 
    IsEssential = true 
});

En définissant IsEssential = true, le cookie sera écrit sur le disque de l'utilisateur même si celui-ci n'a pas encore cliqué sur le bouton d'acceptation de la bannière RGPD.

Étiquettes: ASP.NET Core GDPR cookies .NET Core 2.1 Web Security

Publié le 6 juillet à 04h36