Utiliser le framework de demande de suppression de données

Certaines régions sont soumises à des réglementations sur la suppression des données qui obligent les éditeurs à fournir aux utilisateurs de leur contenu un moyen de demander la suppression de leurs données. Si votre intégration Real-time Bidding utilise des identifiants first party et reçoit un inventaire provenant de régions soumises à des réglementations sur la suppression des données, Google vous recommande de l'intégrer au framework 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 Ad Exchanges, qui peuvent la propager à votre intention. Lorsque vous recevez une demande de suppression de données, vous devez la propager aux entités avec lesquelles vous avez partagé les données first party de l'éditeur. Par exemple, si vous disposez d'une intégration Open Bidding, vous devez propager la demande aux enchérisseurs de votre Ad Exchange avec lesquels les données first party ont été partagées.

Ce guide explique la configuration initiale de votre intégration du framework de demande de suppression de données avec l'Ad Exchange Google et présente un aperçu du workflow du framework de demande de suppression de données dans le contexte de l'Ad Exchange Google. Pour obtenir des conseils supplémentaires, consultez Framework 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 auprès de Google un domaine 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 sert à plusieurs fins, par exemple :

  • Identifier le point de terminaison auquel Google envoie les demandes de suppression de données.
  • Lister les identifiants compatibles et leur format.
  • Spécifier vos clés publiques conformes à la norme JSON Web Key (JWK), que les autres parties utilisent pour vérifier l'authenticité des demandes de suppression de données propagées ou des accusés de réception 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 de chiffrement pour le langage de programmation de votre choix afin de vérifier 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": "ppuid", "format": "plaintext" },
        { "id": 2, "type": "ifv", "format": "plaintext" },
        { "id": 3, "type": "sco", "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 vous propage les demandes de suppression de données des éditeurs 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 une demande de suppression de données pour un identifiant à Google.
  • Google détermine que l'identifiant de l'é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 de 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 :

  • ppuid : identifiants fournis par l'éditeur.
  • sco : identifiants first party de l'éditeur pour le Web.
  • ifv : identifiants first party de l'éditeur pour les appareils iOS.

Google envoie la demande de suppression de données sous la forme d'une 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.
  • Une charge utile JWS contenant la demande de suppression.
  • Une 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 met en forme ces éléments 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 de données, consultez Implémentation du jeton Web JSON (JWT). La demande de suppression de données que vous recevez de Google est un jeton JWT de requête (rqJWT), qui inclut le jeton JWT d'identité (idJWT) que l'éditeur a envoyé lors de la demande de suppression.

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

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

L'exemple suivant est un en-tête décodé indiquant 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 requête

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

Pour vérifier l'authenticité de la demande de suppression de 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

Une fois que vous avez vérifié l'authenticité de la demande de suppression de données, vous devez analyser la charge utile pour vérifier l'identifiant à supprimer. La charge utile décodée est un jeton rqJWT. Pour en savoir plus, consultez rqJWT : jeton JWT de "requête" du demandeur.

L'exemple suivant montre une charge utile décodée sous la forme d'un 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 de 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 : jeton JWT "d'identifiant" de l'émetteur .

Propager la demande de suppression de données

Vous devez propager 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 propager la demande de suppression de données aux enchérisseurs de votre Ad Exchange avec lesquels l'identifiant first party a été partagé. Pour ce faire, vous devez envoyer un jeton rqJWT aux partenaires de 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.

Accuser réception de la demande de suppression de données

Pour accuser réception de la demande de suppression de données et confirmer 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 : jeton 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 requête a été reçue, analysée et traitée.
  • Échec : renvoyez HTTP 400 si la requête n'a pas été reçue, analysée et traitée.

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 compatibles avec le framework de demande de suppression de données, consultez Codes de résultat.

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

Renseignez l'en-tête en fonction de la fonction de hachage et de la clé publique que vous souhaitez que le destinataire utilise pour vérifier votre signature. L'en-tête non encodé 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 dont vous accusez réception. 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"
}