Aller au contenu principal
Woop Technology
Toutes les références
Étude de cas technique | Sécurité & indépendance

Une architecture de consentement conçue pour nos projets, pour la sécurité et la souveraineté des données

Pour nos applications web, nous avons développé nous-mêmes la gestion des consentements au lieu de la confier à une plateforme externe. Fonction, design et comportement restent entre nos mains ; les consentements et leurs journaux restent sur notre propre infrastructure – sans script tiers dans le chemin de chargement et sans frais récurrents.

Interface
Bandeau et réglages dans le design du projet
Moteur de consentement
État, versionnage, registre, filtrage
Source de données
JSON, API ou CMS – interchangeable
Trois couches distinctes : le moteur au centre porte le fonctionnement, la source de données en dessous est interchangeable, et l'interface au-dessus appartient à chaque projet.
Données du projet
Type
Étude de cas technique
Module
@woop-technology/consent
Projets de référence
Statut
En service | en développement continu
Intégration
React | Next.js App Router
Distribution
Registre de paquets privé
Axes principaux
  • Architecture de consentement
  • Souveraineté des données
  • Google Consent Mode v2
  • Registre des cookies
  • consentements versionnés
  • filtrage des scripts
  • sources de données interchangeables
  • multilinguisme
  • interfaces propres au projet
  • journalisation côté serveur
Situation de départ

Pourquoi nous avons développé notre propre gestion du consentement

Les applications web intègrent souvent des services externes comme l’analytique, les cartes, les vidéos ou la prise de rendez-vous. Il en résulte des flux de données supplémentaires – et deux questions : à quelles conditions ces services peuvent être chargés, et ce qu’il advient des données une fois qu’elles ont quitté notre propre serveur.

La réponse évidente serait une plateforme de consentement externe. Pour nous, elle aurait apporté trois choses dont nous ne voulions pas : une facture mensuelle de plus, un système de consentement qui n’entre dans l’application que dans les limites prévues par le prestataire – et les données de consentement de nos visiteurs sur des serveurs étrangers.

C’est pourquoi nous avons développé notre propre gestion du consentement : comme partie intégrante de notre architecture applicative, réutilisable et adaptable – et conçue pour que les données restent exclusivement sur notre propre infrastructure.

La solution devait
  1. 01Gérer les consentements et les valeurs de stockage de manière centralisée, sans prestataire externe
  2. 02Activer les services en fonction du consentement
  3. 03Traiter les consentements et les journaux exclusivement sur notre propre infrastructure
  4. 04Prendre en charge différentes langues, sources de données et interfaces
  5. 05Être réutilisable, sans frais supplémentaires par mois ou par projet

Il en est résulté un moteur de consentement autonome, utilisé aujourd'hui comme module technique commun dans nos projets.

Indépendance & sécurité

Trois choses que nous ne déléguons pas

Une plateforme de consentement externe ajoute un prestataire : ses propres scripts, sa propre configuration, ses propres serveurs et une redevance récurrente. Notre propre moteur tourne au contraire avec l’application, au sein de la même infrastructure et avec les mêmes outils.

Concrètement, cela tient en trois points.

Coûts
Aucune licence par domaine, par page vue ou par mois. Les coûts naissent une fois lors du développement, puis dans la maintenance.C’est viable parce que le même composant tourne dans plusieurs projets.
Contrôle
Fonction, base de données, design et comportement sont définis par nous – jusque dans le code applicatif, qui peut interroger directement l’état du consentement.Rien ne s’arrête là où s’arrête l’offre d’un prestataire.
Données
Configuration, consentements et journaux se trouvent sur nos propres serveurs. Aucun tiers ne stocke, ne traite ni ne voit les décisions des visiteurs.
La fonction de consentement ne nécessite pas de CMP externe

La configuration de consentement et le moteur central font partie de l'application. Aucun fournisseur de CMP externe n'est donc nécessaire pour le système de consentement lui-même.

Cela signifie
  • aucun script CMP supplémentaire
  • aucun appel réseau externe pour la fonction de consentement elle-même
  • aucune interface de consentement tierce
  • aucune dépendance de plateforme supplémentaire pour la seule gestion des consentements

Les services soumis à consentement en restent distincts et ne se chargent qu'une fois le consentement requis obtenu.

Moins de code tiers, moins de surface d’attaque

Un script de consentement externe s’exécute avec les mêmes droits que la page elle-même et est chargé depuis un serveur tiers. Chaque version livrée par le prestataire devient ainsi partie du site sans pouvoir être vérifiée en détail.

Avec des prestataires établis, cela ne pose généralement pas de problème. Nous préférons néanmoins connaître le code qui s’exécute sur nos pages : notre propre moteur est versionné, vérifié et déployé comme le reste du code de l’application.

Le point de terminaison de journalisation
  • n’accepte que les requêtes provenant de l’origine du site
  • vérifie que chaque requête contient des champs complets et autorisés
  • tronque l’adresse IP avant l’enregistrement
  • se trouve sur un chemin fixe pour lequel le pare-feu en amont peut tenir ses propres règles
Les consentements et les journaux se trouvent sur nos propres serveurs

Aucun autre prestataire n’intervient dans la gestion des consentements. La décision d’un visiteur prend effet dans l’application et est journalisée sur le serveur même où tourne l’application – là où sont aussi traitées les autres données du projet. Cela vaut pour chaque projet qui utilise le moteur : les décisions sont journalisées localement dans le conteneur de l’application concernée.

Les autres services externes utilisés par un projet donné et les données transmises à cette occasion sont définis et documentés séparément, projet par projet.

Architecture

Trois couches distinctes pour la logique, les données et l'affichage

Le système de consentement sépare la logique fonctionnelle centrale des données propres au projet et de l'interface visible.

La même base technique peut ainsi servir dans différentes applications, sans devoir réimplémenter l'état du consentement, le versionnage ou le filtrage des scripts pour chaque projet.

Le module est livré avec une interface standard que le projet met en forme ou remplace entièrement. C’est ainsi que le même moteur tourne sur une plateforme d’art et sur un site d’entreprise, bien que les deux interfaces diffèrent par leur design.

Moteur de consentement
Le moteur central assure les fonctions qui restent identiques d'un projet à l'autre :
  • état du consentement
  • vérification de version
  • registre des cookies
  • filtrage des scripts
  • solutions à deux clics
  • retrait
  • nettoyage des valeurs de stockage déclarées
  • Google Consent Mode v2
La logique fonctionnelle commune est maintenue de manière centrale et mise à disposition comme module réutilisable.
Source de données
Le moteur reçoit les informations propres au projet via une interface définie. Il s'agit notamment de :
  • version du consentement
  • catégories et services
  • cookies et autres valeurs de stockage
  • textes par langue
  • configurations de scripts
L’implémentation fournie lit des fichiers JSON dans le projet. Un CMS headless ou une API propre se connecte en implémentant la même interface – le moteur n’en est pas affecté.
Interface
Le bandeau et la fenêtre de réglages sont conçus pour le projet concerné. L'interface reçoit du moteur central les données nécessaires et un ensemble d'actions défini.L'apparence visuelle peut ainsi être adaptée à chaque projet sans devoir modifier la logique de consentement sous-jacente.

Tout sur notre propre infrastructure.

0Prestataires externes
0Scripts CMP externes
Projet de référence | Woop Art
3Catégories de consentement
4Services
7Cookies
2Langues
Projet de référence | Ce site web
3Catégories de consentement
4Services
7Cookies
5Langues

Les chiffres sous les projets de référence correspondent à leur configuration respective. Catégories, services et cookies sont librement configurables.

Un module commun plutôt que des solutions isolées par projet

Le moteur de consentement est fourni sous forme de package propre via le registre de packages privé de Woop Technology. Les versions et les modifications sont gérées de manière centralisée ; chaque projet intègre la version dont il a besoin et adopte les mises à jour à son propre rythme – différents projets peuvent donc utiliser différentes versions en même temps.

Chaque nouveau projet ajoute quatre éléments :

01Données
Catégories, services, valeurs de stockage et textes.
02Persistance
L'endroit où sont stockés les journaux des décisions de consentement.
03Intégrations
L'analytique et d'autres services soumis à consentement.
04Design
Interface par défaut ou composants de bandeau et de réglages sur mesure.

L'état du consentement, le versionnage, le registre, le filtrage des scripts et le retrait proviennent du module commun. Les améliorations du moteur peuvent être reprises dans plusieurs projets via des mises à jour versionnées.

Ce qu’apporte le moteur, ce que décide le projet

  1. 01Moteurconsentement par catégorie, versionnage, révocation, nettoyage des cookies, gating des scripts, Google Consent Mode v2
  2. 02Projetsource de données (JSON, API ou CMS headless), langues, interface (UI standard ou composants propres), intégrations (hooks, solutions à deux clics)
  3. 03Persistancecookie de consentement dans le navigateur, journalisation côté serveur, adresses IP tronquées
  4. 04Stack & exploitationReact, TypeScript, Next.js App Router, injection de dépendances, registre de packages privé, entrées vérifiées

Ce qu'un consentement enregistre dans le navigateur

Représentation simplifiée : ici, chaque modification s'applique immédiatement, dans la vraie fenêtre seulement à l'enregistrement – et chaque enregistrement est journalisé côté serveur. Les champs et la version correspondent au moteur de ce site. Vérifié le 21 septembre 2026 dans un environnement de test : l'intégration analytics testée ne se charge qu'après le consentement correspondant.

Deux clics avant qu'un service externe ne se charge

Tous les consentements n'ont pas leur place dans le bandeau. Pour les services intégrés comme la prise de rendez-vous, le moteur le recueille là où le visiteur veut réellement utiliser le service.

Premier clic : avis et nouveau libellé. Un clic à côté referme l'avis sans que Google ait été chargé.
Enregistrement de la page d'accueil de ce site. Vérifié le 23 septembre 2026 : au chargement de la page et après le premier clic, aucune requête ne part vers un serveur externe ; toutes les requêtes vers Google suivent le second clic.
  1. 01

    Premier clic : l'avis

    Le bouton indique quel prestataire serait chargé et quelles données seraient transmises. Son libellé devient « Charger Google Agenda ».

  2. 02

    Deuxième clic : le chargement

    Ce n'est qu'à ce moment que le script et la feuille de style du prestataire sont intégrés et que la réservation s'ouvre. Jusque-là, aucune requête n'est envoyée à Google.

  3. 03

    Sans passer par le bandeau

    Le visiteur n'a pas besoin d'autoriser une catégorie dans les paramètres de consentement. La décision se prend au niveau du service, pour ce seul service.

Les composants nécessaires se trouvent dans le même package que le moteur : prêts à l'emploi pour Google Agenda et Calendly, et disponibles pour d'autres services via un composant de base commun.

L'identifiant de consentement est à portée de clic

Chaque décision est journalisée sur le serveur, mais elle ne se retrouve sans ambiguïté que par son identifiant de consentement. Un composant dédié met cet identifiant à portée de main des visiteurs.

L'identifiant se trouve dans le cookie de consentement, où personne ne le voit sans outils de développement. C'est pourtant le seul moyen univoque d'accéder à l'entrée sur le serveur, car l'adresse IP n'est enregistrée que sous forme tronquée.

Le composant affiche l'identifiant et le copie en un clic. Pour une question, une réclamation ou une demande d'accès, les visiteurs le joignent directement, et l'entrée est retrouvée sans questions complémentaires – avec l'heure, la version et le choix.

Le composant figure dans la déclaration de protection des données du site concerné et mène aussi directement de là aux paramètres de consentement.

Statut du consentement : Non défini

Votre ID de consentement actuel

Cet ID unique est stocké localement dans votre navigateur et de manière pseudonymisée sur notre serveur afin de prouver votre choix en matière de protection des données. Pour toute question ou réclamation concernant votre consentement, veuillez nous transmettre cet ID – il nous permet de retrouver sans ambiguïté la preuve correspondante.

Aucun choix effectué pour l'instant

Le composant est fourni prêt à l'emploi avec le package de consentement. Comme le bandeau et la fenêtre de paramètres, il se conçoit librement : le fonctionnement reste dans le package, le projet décide de l'apparence – ici celle de ce site.

Données, langues & interface

La logique de consentement n'est pas liée à une source de données particulière

Le moteur de consentement ne lit pas ses données lui-même, mais via une interface définie. C'est l'implémentation de cette interface qui détermine leur provenance – le moteur reste le même.

Par défaut : fichiers dans le projet
L'implémentation fournie lit des fichiers JSON versionnés, livrés avec le code source. La configuration ne nécessite aucun appel réseau.
CMS éditorial
Si l'interface est implémentée pour un CMS headless, la rédaction y gère textes, services et cookies – sans modifier le moteur.
Système propre via API
Un CMS maison ou un service central se connecte de la même manière via son API – par exemple pour gérer ensemble les données de consentement de plusieurs applications.

Définition technique et traductions restent séparées

Les noms de cookies, les identifiants, les catégories et les durées de conservation sont définis une seule fois. Les textes du bandeau et de la fenêtre de paramètres existent en revanche dans chaque langue ; le visiteur les voit dans la langue qu'il a choisie :

  • libellés et descriptions des catégories
  • informations sur les services et finalités des cookies
  • informations sur les transferts de données
  • textes du bandeau et boutons
  • libellés pour lecteurs d'écran

Une logique commune, des interfaces différentes

Le moteur propose une interface par défaut, qui peut être remplacée en tout ou en partie par des composants propres au projet.

Un projet peut
  • reprendre le bandeau et la fenêtre de réglages tels quels
  • concevoir uniquement le bandeau
  • remplacer uniquement la fenêtre de réglages
  • réaliser les deux interfaces sur mesure

L'état du consentement, le versionnage et le retrait restent gérés de manière centralisée.

Bandeau de consentement dans le design du projet de référence
Le bandeau s'intègre visuellement au site.
Fenêtre de réglages avec les catégories de consentement
Catégories, services et cookies déclarés sont présentés avec les données et les actions du moteur central.
Preuve & exploitation

Journalisation des décisions côté serveur

Chaque consentement et chaque modification ultérieure génèrent un enregistrement sur le serveur, en plus de l'état dans le navigateur. Cette journalisation fait partie intégrante du processus ; elle n'est pas optionnelle.

La destination de l'enregistrement dépend, là aussi, de l'implémentation de l'interface : par défaut, l'application le dépose sous forme de fichier sur son propre serveur. Elle peut tout aussi bien le transmettre via une API à un autre service qui le gère, par exemple dans une base de données.

Sont notamment consignés
  • identifiant de consentement
  • version de la configuration
  • sélection effectuée
  • horodatage
  • user agent
  • adresse IP tronquée

Les adresses IPv4 sont tronquées après le deuxième bloc, les adresses IPv6 après le troisième segment. Les entrées reçues sont vérifiées ; les requêtes incomplètes ou non admises sont refusées.

La journalisation soutient la traçabilité des décisions, mais ne constitue pas un archivage à valeur probante.

Une erreur de journalisation ne bloque pas l'application

La décision du visiteur prend d'abord effet dans l'état de consentement de l'application. Si l'enregistrement côté serveur échoue, le site reste utilisable.

L'erreur est journalisée côté serveur plutôt que d'exposer des détails techniques dans le navigateur. Le bon fonctionnement du système de consentement ne dépend donc pas de la disponibilité permanente de cette journalisation.

Du clic à l'entrée de journal

consent-flow demo
01 Paramètres chargés02 Choix reçu03 État du consentement mis à jour04 Décision journaliséeProcessus terminé
Représentation schématique – pas une sortie des journaux réels du système.
  1. 01

    Le choix dans la bannière

    Le visiteur décide, catégorie par catégorie, quels services il autorise. Les valeurs de stockage nécessaires restent actives.

  2. 02

    L'application dans le code

    Le moteur enregistre le choix, met à jour Google Consent Mode et active les services autorisés.

  3. 03

    La journalisation côté serveur

    La décision est journalisée avec version et horodatage.

Mise en perspective

Pourquoi une solution propre allait de soi pour nous

L'objectif était d'éviter d'emblée les dépendances et les coûts récurrents. Si nous avons pu y parvenir rapidement et de manière fiable, c'est grâce à ce que nous avions déjà en main.

Expertise en protection des données et en consentement
La manière dont s'articulent consentements, Google Consent Mode et obligations d'information envers les visiteurs fait partie de notre travail quotidien sur les applications web.
Nos propres applications, pas un outil de création de sites
Nos projets sont des applications web autonomes. Le consentement a donc pu être construit comme partie de l'application plutôt que greffé de l'extérieur.
Notre propre infrastructure
Nous exploitons nous-mêmes l'hébergement, le déploiement et le pare-feu. Conserver les journaux sur nos serveurs n'a donc demandé aucun nouveau service, seulement un point de terminaison de plus dans l'application existante.
Modules communs
Nos projets partagent déjà d'autres modules via notre registre de paquets privé. Le moteur de consentement en fait partie et est disponible pour chaque nouveau projet.

Le moteur de consentement n'a donc pas été un grand chantier, mais le prolongement de ce qui existait déjà.

Le consentement peut être intégré directement dans l'application

L'état central du consentement est également accessible au code applicatif.

Un composant peut ainsi vérifier par exemple
  • L'analytique est-elle autorisée ?
  • Une vidéo intégrée peut-elle être chargée ?
  • Faut-il obtenir un consentement avant une carte externe ?
  • La décision enregistrée est-elle encore valable pour la version de consentement actuelle ?

Le consentement ne se limite donc pas au bandeau et à la fenêtre de réglages, mais peut être intégré directement dans le déroulement d'une application.

Le contrôle total implique la responsabilité totale

Sans prestataire, personne ne met à jour les listes de cookies, ne reprend les évolutions de Google Consent Mode ni n'adapte les textes à un nouveau cadre juridique. Ce travail nous revient – dans le cadre de la maintenance que nous assurons de toute façon pour nos applications – ou au client, lorsque textes et informations sont gérés via un CMS connecté.

Résultat

Une base propre pour le consentement, sans prestataire entre les deux

Le moteur de consentement est aujourd’hui utilisé dans différentes applications web – sans prestataire externe, sans licence récurrente, avec les consentements et leurs journaux sur notre propre infrastructure. Les fonctions centrales sont maintenues une seule fois, tandis que données, intégrations, langues et interface restent propres à chaque projet.

Indépendance
Aucun prestataire, aucune licence, aucun script tiers dans le chemin de chargement.
Souveraineté des données
Configuration, consentements et journaux se trouvent sur notre propre infrastructure.
Consentement avant les services concernés
Les intégrations correspondantes ne se chargent qu'après le consentement requis.
Décisions versionnées
Les consentements enregistrés sont liés à l'état correspondant de la configuration.
Logique de consentement centrale
État, versionnage, registre, filtrage des scripts et retrait sont gérés ensemble.
Réutilisable et flexible
Sources de données, langues et interfaces par projet ; améliorations du moteur via des mises à jour versionnées.