Identification utilisateur
Recommandation de la CNIL
Le remplacement de l’identifiant utilisateur par le serveur de proxification. Pour assurer une pseudonymisation effective, l’algorithme effectuant le remplacement devrait assurer un niveau de collision suffisant (c’est-à-dire une probabilité suffisante que deux identifiants différents donnent un résultat identique après hachage) et comporter une composante temporelle variable (ajouter à la donnée hachée une valeur qui évolue avec le temps pour que le résultat du hachage ne soit pas toujours le même pour un même identifiant) ;
Solution
Deux champs envoyés au GA4 permettent d'identifier l'utilisateur dans le temps :
x-ga-js_client_id
: Lex-ga-js_client_id
est la valeur du cid envoyé dans la requête du navigateur. Dans la requête envoyée par le serveur au GA4, ce champ est appeléjscid
.client_id
: Leclient_id
est basé sur cette même valeur (cid) mais a été traité par le client GA4. Dans la requête qui est envoyée par le serveur au GA4, ce champ est appelécid
.
Nous devrons pseudonymiser ces deux champs afin que Google ne puisse pas relier plusieurs sessions du même utilisateur.
Pour assurer cette unicité entre plusieurs sessions, nous allons créer un modèle de variable qui va hacher une valeur d'entrée (dans ce cas, notre client_id) en ajoutant une composante temporelle (partie d'un timestamp).
Pour ce faire, allez dans Templates > Variable Templates > New.
Dans la partie "Info", nous nommerons le modèle (ici, il sera appelé "Pseudonymize Variable").
Dans le deuxième onglet (Fields), nous ajouterons un champ permettant d'associer notre variable au fait d'être pseudonymisée.
Créer un nouveau champ
- Cliquez sur 'Add Field' > Sélectionnez 'Text Input' > Renommez le champ en 'input' > Entrez 'Value to pseudonymize' comme nom d'affichage.
Ajouter un nouveau contrôle
- Cliquez sur la roue dentée (paramètres) > Activez 'Validation rules' > Cliquez sur 'Add rules' > L'option 'This value cannot be empty' doit être sélectionnée par défaut.
Le troisième onglet (Code) est le traitement appliqué à cette variable. Voici le code à copier et à coller dans le champ approprié.
const ts = require("getTimestampMillis");
const sha256Sync = require('sha256Sync');
const math = require("Math");
var t = ts();
var key = math.round(t / 10000000);
return sha256Sync(data.input + '.' + key, {outputEncoding: 'hex'});
Notre variable sera hachée après concaténation avec une clé qui change toutes les 2 heures et 45 minutes. Cette modification nous permet de créer des client_ids identiques au sein d'une session mais différents d'une session à l'autre. Cela empêchera GA4 de suivre un utilisateur dans le temps.
Maintenant que nous avons créé ce modèle de variable, nous allons devoir mettre à jour notre client_id
et x-ga-js_client_id
avant de l'envoyer à Google.
Tout d'abord, nous créons une variable GA4 - Client ID, qui récupérera la valeur de client_id dans les données des événements.
Variables > New:
- Variable name:
GA4 - Client ID
- Variable type: Event Data
- Key path:
client_id
Ensuite, nous utilisons notre modèle précédemment créé pour pseudonymiser cette variable.
Variables > New:
- Variable name:
GA4 - Client ID Pseudonymized
- Variable type: Pseudonymized Variable
- Key path:
{{GA4 - Client ID}}
Notre client_id est maintenant pseudonymisé ; nous devons répéter ces deux dernières étapes pour le x-ga-js_client_id
.
Variables > New:
- Variable name:
GA4 - JS Client ID
- Variable type: Event Data
- Key path:
x-ga-js_client_id
Ensuite, nous utilisons notre modèle précédemment créé pour pseudonymiser cette variable.
Variables > New:
- Variable name:
GA4 - JS Client ID Pseudonymized
- Variable type: Pseudonymized Variable
- Key path:
{{GA4 - JS Client ID}}
Une fois que ces deux variables sont pseudonymisées, elles doivent être attribuées dans la balise GA4 pour remplacer les variables existantes
- Tags > Ouvrez le tag GA4 > Ouvrez la partie 'Event Parameters' > Ajoutez ces deux variables dans la partie 'Parameters to Add / Edit'.
Nos cid et jscid sont maintenant pseudonymisés.