Usa el marco de trabajo de solicitudes de eliminación de datos

Algunas regiones tienen reglamentaciones sobre la eliminación de datos que exigen que los publicadores proporcionen a los usuarios de su contenido un medio para solicitar la eliminación de sus datos. Si tu integración de la oferta en tiempo real utiliza identificadores propios y recibe inventario de regiones que tienen reglamentaciones sobre la eliminación de datos, Google te recomienda que realices la integración con el marco de trabajo de solicitudes de eliminación de datos de IAB.

Cuando un usuario elige borrar sus identificadores de la app o el sitio de un publicador, el marco de trabajo de solicitudes de eliminación de datos permite que el publicador propague una solicitud de eliminación de datos. El publicador envía una solicitud de eliminación de datos a los intercambios, que pueden propagarla a ti. Cuando recibas una solicitud de eliminación de datos, debes propagarla a las entidades con las que hayas compartido los datos de origen del publicador. Por ejemplo, si tienes una integración de Open Bidding, debes propagar la solicitud a los ofertantes de tu intercambio con los que se compartieron los datos de origen.

En esta guía, se abarca la configuración inicial de la integración de tu marco de trabajo de solicitudes de eliminación de datos con el intercambio de Google y se proporciona una descripción general del flujo de trabajo del marco de trabajo de solicitudes de eliminación de datos en el contexto del intercambio de Google. Para obtener orientación adicional, consulta el Marco de trabajo de solicitudes de eliminación de datos.

Configura tu integración

Para comenzar a recibir solicitudes de eliminación de datos de Google, debes registrar un dominio en Google que desees asociar con tu cuenta y alojar un archivo dsrdelete.json en la raíz del dominio registrado. Para registrar tu dominio en Google, comunícate con tu administrador de cuentas. El archivo dsrdelete.json tiene varios propósitos, por ejemplo:

  • Identifica el extremo al que Google envía las solicitudes de eliminación de datos.
  • Enumera los identificadores admitidos y cómo se formatean.
  • Especificar tus claves públicas según el estándar de clave web JSON (JWK), que otras partes usan para verificar la autenticidad de las solicitudes o los acuses de recibo de eliminación de datos propagados que envías

Para obtener detalles sobre el archivo drsdelete.json, como los campos obligatorios y opcionales que puedes completar, consulta Descubrimiento.

El extremo que especificaste en el archivo dsrdelete.json debe recibir las solicitudes de eliminación de datos entrantes y responder a ellas. Google recomienda usar una biblioteca criptográfica para el lenguaje de programación que elijas para verificar las solicitudes que recibas y firmar los acuses de recibo que envíes.

En el siguiente ejemplo, se establece un archivo dsrdelete.json con un extremo, identificadores y una clave pública:

{
    "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
}

Cómo recibir una solicitud de eliminación de datos

Google propaga las solicitudes de eliminación de datos de los publicadores a usted cuando se cumplen todas las siguientes condiciones:

  • Alojas un archivo dsrdelete.json válido en un dominio registrado en Google.
  • El publicador envía a Google una solicitud de eliminación de datos para un identificador.
  • Google determina que el identificador del publicador enviado en la solicitud de eliminación de datos se compartió contigo.

Cuando recibes una solicitud de eliminación de datos, eres responsable de borrar los datos especificados. También debes seguir propagando la solicitud de eliminación de datos a otros socios de datos con los que hayas compartido los datos de origen del publicador. Google admite solicitudes de eliminación de datos para los siguientes identificadores:

  • ppid: Identificadores proporcionados por el publicador (PPID).
  • pfpid_domain: Son los identificadores propios del publicador para la Web.
  • idfv: Son los identificadores propios del publicador para dispositivos iOS.

Google envía la solicitud de eliminación de datos como una solicitud HTTP POST al extremo especificado en tu archivo dsrdelete.json. El cuerpo de la solicitud de eliminación de datos contiene un token web JSON (JWT) compuesto por las siguientes partes:

  • Un encabezado JOSE que describe el algoritmo de encriptación.
  • Es una carga útil de JWS que contiene la solicitud de eliminación.
  • Firma JWS para verificar la autenticidad de la solicitud.

Google codifica el encabezado, la carga útil y la firma en base64, y les da el siguiente formato:

WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD.WEB_SAFE_BASE64_ENCODED_SIGNATURE

Para obtener más información sobre los distintos JWT que se usan en el framework de eliminación de datos, consulta Implementación de JSON Web Token (JWT). La solicitud de eliminación de datos que recibes de Google es un JWT de solicitud (rqJWT), que incluye el JWT de identidad (idJWT) que el publicador envió cuando solicitó la eliminación.

Encuentra detalles de validación en el encabezado

El encabezado es un objeto JSON que describe el algoritmo que debes usar para generar un hash de la solicitud, lo que es necesario para verificar la autenticidad de la solicitud. Si la entidad emisora tiene varias claves privadas que puede usar para generar una firma, el encabezado también identifica cuál de las claves públicas de la entidad emisora puedes usar para validar la firma.

En el siguiente ejemplo, se muestra un encabezado decodificado que indica que puedes usar el algoritmo RSA256 con el ID de clave abc123 para validar la firma:

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

Autentica la solicitud

Puedes verificar que Google haya enviado las solicitudes de eliminación de datos con la clave pública en el archivo dsrdelete.json de Google. El archivo dsrdelete.json de Google se aloja en https://static.doubleclick.net/dsrdelete.json.

Para verificar la autenticidad de la solicitud de eliminación de datos, sigue estos pasos:

  1. Calcula el hash del encabezado y la carga útil con el algoritmo identificado en el encabezado. Los datos que se pasan a tu función hash deben usar la siguiente estructura:

    WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD
    
  2. Usa la clave pública especificada en el archivo dsrdelete.json de la entidad emisora para desencriptar la firma decodificada.

  3. Compara el hash que generaste en el paso uno con el valor descifrado de la firma. Si estos elementos coinciden, la solicitud de eliminación de datos es auténtica.

Analiza la carga útil de la solicitud de eliminación

Después de verificar la autenticidad de la solicitud de eliminación de datos, debes analizar la carga útil para verificar qué identificador se debe borrar. La carga útil decodificada es un token de rqJWT. Para obtener más detalles, consulta rqJWT: JWT de "solicitud" del solicitante.

En el siguiente ejemplo, se muestra una carga útil decodificada como un token rqJWT y se incluyen parámetros opcionales:

{
    "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 solicitud de eliminación de datos incluye el campo sub, que contiene una cadena JSON que indica que el publicador solicita la eliminación de un PPID con el valor crvBtLjLqNUiafwXZiyukLD4Tf6mMUYhBdQaPZ0pjyd. El token rqJWT incluye el token idJWT codificado. Para obtener más detalles, consulta idJWT: JWT del “identificador” del emisor .

Propaga la solicitud de eliminación de datos

Debes propagar la solicitud de eliminación de datos a todos los socios de datos con los que hayas compartido los identificadores especificados. Por ejemplo, si te integraste con Open Bidding, debes propagar la solicitud de eliminación de datos a los ofertantes de tu intercambio con los que se compartió el identificador propio. Este proceso requiere que envíes a los socios de datos un token rqJWT. El token rqJWT debe contener los identificadores pertinentes, con el formato basado en la configuración del archivo dsrdelete.json del socio de datos. Además, el token rqJWT debe incluir tu firma generada con tu clave privada.

Confirma la solicitud de eliminación de datos

Para confirmar que recibiste la solicitud de eliminación de datos y que tomaste medidas al respecto, envía un JWT de confirmación al extremo que Google especifica en el archivo dsrdelete.json. Para obtener más detalles, consulta acJWT: JWT de "confirmación" del destinatario.

El código de estado HTTP de tu respuesta depende del siguiente resultado:

  • Éxito: Devuelve HTTP 202 si la solicitud se recibió, analizó y procesó correctamente.
  • Falla: Devuelve HTTP 400 si la solicitud no se recibió, analizó ni procesó correctamente.

El cuerpo de la solicitud debe incluir un token de acJWT con una carga útil que complete el campo raResultCode con un código de resultado entero. De manera opcional, puedes proporcionar texto descriptivo sobre el resultado en el campo raResultString. El token de acJWT debe incluir tu firma generada con tu clave privada.

Para obtener más información sobre los códigos de resultado admitidos en el marco de trabajo de solicitudes de eliminación de datos, consulta Códigos de resultado.

Compila el encabezado del token acJWT

Completa el encabezado según la función hash y la clave pública que deseas que el destinatario use cuando verifique tu firma. El encabezado sin codificar del siguiente ejemplo indica que deseas que el destinatario use el algoritmo ES256 para generar el hash y que debe usar la clave pública con el ID de clave EhuduQ de tu archivo dsrdelete.json cuando desencripte tu firma.

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

Compila la carga útil del token acJWT

Propaga la carga útil según el resultado de la solicitud de eliminación y propaga el campo rqJWT con la forma codificada del token rqJWT que confirmas. En el siguiente ejemplo, se especifica un campo raResultCode con el valor 0 para indicar que la operación se realizó correctamente:

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