Utiliser le framework de demande de suppression de données

Dans certaines régions, des réglementations sur la suppression des données exigent que les éditeurs fournissent aux utilisateurs de leurs contenus un moyen de demander la suppression de leurs données. Si votre intégration d'enchères en temps réel utilise des identifiants propriétaires et reçoit un inventaire provenant de régions où des réglementations sur la suppression des données sont en vigueur, Google vous recommande de l'intégrer au cadre de demande de suppression de données de l'IAB.

Lorsqu'un utilisateur choisit de supprimer ses identifiants de l'application ou du site d'un éditeur, le framework de demande de suppression de données permet à l'éditeur de propager une demande de suppression de données. L'éditeur envoie une demande de suppression de données aux plates-formes d'échange, qui peuvent la transmettre à leur tour. Lorsque vous recevez une demande de suppression de données, vous devez la transmettre aux entités avec lesquelles vous avez partagé les données first party de l'éditeur. Par exemple, si vous avez une intégration Open Bidding, vous devez propager la demande aux enchérisseurs sur votre plate-forme indiquant que les données first party ont été partagées.

Ce guide explique comment configurer l'intégration de votre framework de demande de suppression de données à l'échange Google. Il fournit également une présentation du workflow du framework de demande de suppression de données dans le contexte de l'échange Google. Pour obtenir plus de conseils, consultez le cadre de demande de suppression de données.

Configurer votre intégration

Pour commencer à recevoir des demandes de suppression de données de Google, vous devez enregistrer un domaine auprès de Google que vous souhaitez associer à votre compte et héberger un fichier dsrdelete.json à la racine de votre domaine enregistré. Pour enregistrer votre domaine auprès de Google, contactez votre responsable de compte. Le fichier dsrdelete.json a plusieurs objectifs, par exemple :

  • Identifier le point de terminaison auquel Google envoie les demandes de suppression de données.
  • Indiquez les identifiants acceptés et leur format.
  • Spécifiez vos clés publiques conformes à la norme JSON Web Key (JWK). Les autres parties les utilisent pour vérifier l'authenticité des demandes ou des confirmations de suppression de données propagées que vous envoyez.

Pour en savoir plus sur le fichier drsdelete.json, comme les champs obligatoires et facultatifs que vous pouvez renseigner, consultez Découverte.

Le point de terminaison spécifié dans le fichier dsrdelete.json doit recevoir les demandes de suppression de données entrantes et y répondre. Google vous recommande d'utiliser une bibliothèque cryptographique pour le langage de programmation de votre choix afin de valider les requêtes que vous recevez et de signer les accusés de réception que vous envoyez.

L'exemple suivant définit un fichier dsrdelete.json avec un point de terminaison, des identifiants et une clé publique :

{
    "endpoint": "https://www.doubleclick.net/iab-ddrf",
    "identifiers": [
        { "id": 1, "type": "ppid", "format": "plaintext" },
        { "id": 2, "type": "idfv", "format": "plaintext" },
        { "id": 3, "type": "pfpid_domain", "format": "plaintext" }
    ],
    "publicKey": [
        {
            "kty": "EC",
            "crv": "P-256",
            "x": "_OPPeKSEdi3_JEHla93vOGTx8VD01ozhyYxwQzYCVLs",
            "y": "_XHufu2A_hbN5Uj4Wm7JPHE7ly0_4cmqntmz93pweys",
            "kid": "yUa3wQ",
            "use": "sig",
            "alg": "ES256"
        }
    ],
    "vendorScriptRequirement": false
}

Recevoir une demande de suppression de données

Google transmet aux éditeurs les demandes de suppression de données lorsque toutes les conditions suivantes sont remplies :

  • Vous hébergez un fichier dsrdelete.json valide sur un domaine enregistré auprès de Google.
  • L'éditeur envoie à Google une demande de suppression de données pour un identifiant.
  • Google détermine que l'identifiant d'éditeur envoyé dans la demande de suppression de données a été partagé avec vous.

Lorsque vous recevez une demande de suppression de données, vous êtes responsable de la suppression des données spécifiées. Vous devez également continuer à propager la demande de suppression des données aux autres partenaires de données avec lesquels vous avez partagé les données first party de l'éditeur. Google accepte les demandes de suppression de données pour les identifiants suivants :

  • ppid : identifiants fournis par l'éditeur (PPID).
  • pfpid_domain : identifiants first party de l'éditeur pour le Web.
  • idfv : identifiants first party de l'éditeur pour les appareils iOS.

Google envoie la demande de suppression des données en tant que requête HTTP POST au point de terminaison spécifié dans votre fichier dsrdelete.json. Le corps de la demande de suppression de données contient un jeton Web JSON (JWT) composé des éléments suivants :

  • Un en-tête JOSE décrivant l'algorithme de chiffrement.
  • Charge utile JWS contenant la demande de suppression.
  • Signature JWS permettant de vérifier l'authenticité de la demande.

Google encode l'en-tête, la charge utile et la signature en base64, et les met en forme comme suit :

WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD.WEB_SAFE_BASE64_ENCODED_SIGNATURE

Pour en savoir plus sur les différents jetons JWT utilisés dans le framework de suppression des données, consultez Implémentation des jetons Web JSON (JWT). La demande de suppression de données que vous recevez de Google est un JWT de requête (rqJWT), qui inclut le JWT d'identité (idJWT) que l'éditeur a envoyé lors de la demande de suppression.

Trouver les détails de la validation dans l'en-tête

L'en-tête est un objet JSON qui décrit l'algorithme que vous devez utiliser pour générer un hachage de la requête, ce qui est nécessaire pour vérifier l'authenticité de la requête. Si l'émetteur dispose de plusieurs clés privées qu'il peut utiliser pour produire une signature, l'en-tête indique également laquelle de ses clés publiques vous pouvez utiliser pour valider la signature.

L'exemple suivant est un en-tête décodé qui montre que vous pouvez utiliser l'algorithme RSA256 avec l'ID de clé abc123 pour valider la signature :

{
    "typ": "JWT",
    "alg": "RS256",
    "kid": "abc123"
}

Authentifier la demande

Vous pouvez vérifier que Google a envoyé les demandes de suppression de données avec la clé publique dans le fichier dsrdelete.json de Google. Le fichier dsrdelete.json de Google est hébergé à l'adresse https://static.doubleclick.net/dsrdelete.json.

Pour vérifier l'authenticité de la demande de suppression des données, procédez comme suit :

  1. Calculez le hachage de l'en-tête et de la charge utile à l'aide de l'algorithme identifié dans l'en-tête. Les données transmises à votre fonction de hachage doivent utiliser la structure suivante :

    WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD
    
  2. Utilisez la clé publique spécifiée dans le fichier dsrdelete.json de l'émetteur pour déchiffrer la signature décodée.

  3. Comparez le hachage que vous avez généré à l'étape 1 avec la valeur déchiffrée de la signature. Si ces éléments correspondent, la demande de suppression de données est authentique.

Analyser la charge utile de la demande de suppression

Après avoir vérifié l'authenticité de la demande de suppression de données, vous devez analyser la charge utile pour identifier l'identifiant à supprimer. La charge utile décodée est un jeton rqJWT. Pour en savoir plus, consultez rqJWT : JWT de "demande" du demandeur.

L'exemple suivant montre une charge utile décodée en tant que jeton rqJWT et inclut des paramètres facultatifs :

{
    "optionalParameters": "{\"gamNetworkCode\":\"311057\"}",
    "sub": "{\n    \"identifierValue\": \"crvBtLjLqNUiafwXZiyukLD4Tf6mMUYhBdQaPZ0pjyd\",\n    \"identifierType\": \"ppid\",\n    \"identifierFormat\": \"plaintext\"\n  }",
    "iat": 1756257951,
    "version": "1.0",
    "iss": "test_publisher",
    "idJWT": "eyJhbGciOiJFUzI1NiIsImtpZCI6IkVodWR1USIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ0ZXN0X3B1Ymxpc2hlciIsInN1YiI6IntcbiAgICBcImlkZW50aWZpZXJWYWx1ZVwiOiBcImNydkJ0TGpMcU5VaWFmd1haaXl1a0xENFRmNm1NVVloQmRRYVBaMHBqeWRcIixcbiAgICBcImlkZW50aWZpZXJUeXBlXCI6IFwicHBpZFwiLFxuICAgIFwiaWRlbnRpZmllckZvcm1hdFwiOiBcInBsYWludGV4dFwiXG4gIH0iLCJpYXQiOjE3NTYyNTc5NTEsInZlcnNpb24iOiIxLjAifQ.Dh17fv1sxKMnkOa7HOWfVdsIYo8BBy2p9SkDTSfZoW6ypMdl_5wDYtUIYEfuX3n6UbwMoH0WVgGQnFQraMH6XQ"
}

La demande de suppression des données inclut le champ sub, qui contient une chaîne JSON indiquant que l'éditeur demande la suppression d'un PPID avec la valeur crvBtLjLqNUiafwXZiyukLD4Tf6mMUYhBdQaPZ0pjyd. Le jeton rqJWT inclut le jeton idJWT encodé. Pour en savoir plus, consultez idJWT: Issuer "identifier" JWT .

Propager la demande de suppression de données

Vous devez transmettre la demande de suppression de données à tous les partenaires de données avec lesquels vous avez partagé les identifiants spécifiés. Par exemple, si vous êtes intégré à Open Bidding, vous devez transmettre la demande de suppression des données aux enchérisseurs avec lesquels l'identifiant first party a été partagé sur votre plate-forme d'échange. Ce processus vous oblige à envoyer un jeton rqJWT aux partenaires pour les données. Le jeton rqJWT doit contenir les identifiants pertinents, mis en forme en fonction des configurations du fichier dsrdelete.json du partenaire de données. De plus, le jeton rqJWT doit inclure votre signature générée avec votre clé privée.

Confirmer la demande de suppression de données

Pour confirmer que vous avez reçu la demande de suppression de données et que vous l'avez traitée, envoyez un jeton JWT d'accusé de réception au point de terminaison que Google spécifie dans le fichier dsrdelete.json. Pour en savoir plus, consultez acJWT : JWT d'"accusé de réception" du destinataire.

Le code d'état HTTP de votre réponse dépend du résultat suivant :

  • Succès : renvoyez HTTP 202 si la demande a été reçue, analysée et traitée avec succès.
  • Échec : renvoyez HTTP 400 si la requête n'a pas été reçue, analysée et traitée correctement.

Le corps de la requête doit inclure un jeton acJWT avec une charge utile qui renseigne le champ raResultCode avec un code de résultat entier. Vous pouvez éventuellement fournir un texte descriptif sur le résultat dans le champ raResultString. Le jeton acJWT doit inclure votre signature générée avec votre clé privée.

Pour en savoir plus sur les codes de résultat acceptés dans le framework de demande de suppression de données, consultez Codes de résultat.

Créer l'en-tête du jeton acJWT

Remplissez l'en-tête en fonction de la fonction de hachage et de la clé publique que vous souhaitez que le destinataire utilise pour valider votre signature. L'en-tête non codé de l'exemple suivant indique que vous souhaitez que le destinataire utilise l'algorithme ES256 pour générer le hachage et qu'il doit utiliser la clé publique avec l'ID de clé EhuduQ de votre fichier dsrdelete.json lors du déchiffrement de votre signature.

{
    "alg": "ES256",
    "typ": "JWT",
    "kid": "EhuduQ"
}

Créer la charge utile du jeton acJWT

Renseignez la charge utile en fonction du résultat de la demande de suppression, et renseignez le champ rqJWT avec la forme encodée du jeton rqJWT que vous confirmez. L'exemple suivant spécifie un champ raResultCode avec la valeur 0 pour indiquer que l'opération a réussi :

{
    "version": "1.0",
    "jti": "965492b2-74e5-409a-90f4-f041902db05f",
    "raResultString": "",
    "iat": 1756408212,
    "iss": "doubleclick.net",
    "raResultCode": 0,
    "rqJWT": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVodWR1USJ9.eyJvcHRpb25hbFBhcmFtZXRlcnMiOiJ7XCJnYW1OZXR3b3JrQ29kZVwiOlwiMzExMDU3XCJ9Iiwic3ViIjoie1xuICAgIFwiaWRlbnRpZmllclZhbHVlXCI6IFwiY3J2QnRMakxxTlVpYWZ3WFppeXVrTEQ0VGY2bU1VWWhCZFFhUFowcGp5ZFwiLFxuICAgIFwiaWRlbnRpZmllclR5cGVcIjogXCJwcGlkXCIsXG4gICAgXCJpZGVudGlmaWVyRm9ybWF0XCI6IFwicGxhaW50ZXh0XCJcbiAgfSIsImlhdCI6MTc1NjI1Nzk1MSwidmVyc2lvbiI6IjEuMCIsImlzcyI6InRlc3RfcHVibGlzaGVyIiwiaWRKV1QiOiJleUpoYkdjaU9pSkZVekkxTmlJc0ltdHBaQ0k2SWtWb2RXUjFVU0lzSW5SNWNDSTZJa3BYVkNKOS5leUpwYzNNaU9pSjBaWE4wWDNCMVlteHBjMmhsY2lJc0luTjFZaUk2SW50Y2JpQWdJQ0JjSW1sa1pXNTBhV1pwWlhKV1lXeDFaVndpT2lCY0ltTnlka0owVEdwTWNVNVZhV0ZtZDFoYWFYbDFhMHhFTkZSbU5tMU5WVmxvUW1SUllWQmFNSEJxZVdSY0lpeGNiaUFnSUNCY0ltbGtaVzUwYVdacFpYSlVlWEJsWENJNklGd2ljSEJwWkZ3aUxGeHVJQ0FnSUZ3aWFXUmxiblJwWm1sbGNrWnZjbTFoZEZ3aU9pQmNJbkJzWVdsdWRHVjRkRndpWEc0Z0lIMGlMQ0pwWVhRaU9qRTNOVFl5TlRjNU5URXNJblpsY25OcGIyNGlPaUl4TGpBaWZRLkRoMTdmdjFzeEtNbmtPYTdIT1dmVmRzSVlvOEJCeTJwOVNrRFRTZlpvVzZ5cE1kbF81d0RZdFVJWUVmdVgzbjZVYndNb0gwV1ZnR1FuRlFyYU1INlhRIn0.zZnuUsUDzkARg31RzkhLOJCSXD5jPca8qff5IqyYrrRITgRgm29T__6gC3oOOK5RAcd_AFFYWzE8onx6Kj1w8A"
}