Usar a estrutura de solicitação de exclusão de dados

Algumas regiões têm regulamentações de exclusão de dados que exigem que os editores ofereçam aos usuários do conteúdo deles um meio de solicitar a exclusão dos dados. Se a integração de lances em tempo real usar identificadores próprios e receber inventário de regiões com regulamentações de exclusão de dados, o Google recomenda que você faça a integração com a estrutura de solicitação de exclusão de dados da IAB.

Quando um usuário exclui os identificadores dele do app ou site de um publisher, a estrutura de solicitação de exclusão de dados permite que o publisher propague uma solicitação de exclusão de dados. O publisher envia uma solicitação de exclusão de dados às trocas, que podem propagar a solicitação para você. Quando você recebe uma solicitação de exclusão de dados, precisa propagar o pedido para as entidades com quem compartilhou os dados próprios do editor. Por exemplo, se você tiver uma integração do Open Bidding, propague para os bidders na sua troca que os dados próprios foram compartilhados.

Este guia aborda a configuração inicial da integração da sua estrutura de solicitação de exclusão de dados com a troca do Google e oferece uma visão geral do fluxo de trabalho da estrutura de solicitação de exclusão de dados no contexto da troca do Google. Para mais orientações, consulte a Estrutura de solicitação de exclusão de dados.

Configurar a integração

Para começar a receber solicitações de exclusão de dados do Google, registre um domínio com o Google que você quer associar à sua conta e hospede um arquivo dsrdelete.json na raiz do domínio registrado. Para registrar seu domínio no Google, entre em contato com seu gerente de contas. O arquivo dsrdelete.json tem várias finalidades, por exemplo:

  • Identificar o endpoint em que o Google envia solicitações de exclusão de dados.
  • Listar os identificadores aceitos e como eles são formatados.
  • Especificar suas chaves públicas de acordo com o padrão JSON Web Key (JWK), que outras partes usam para verificar a autenticidade das solicitações ou confirmações de exclusão de dados propagadas que você envia.

Para detalhes sobre o arquivo drsdelete.json, como os campos obrigatórios e opcionais que podem ser preenchidos, consulte Descoberta.

O endpoint especificado no arquivo dsrdelete.json precisa receber e responder a solicitações de exclusão de dados recebidas. O Google recomenda usar uma biblioteca criptográfica para a linguagem de programação escolhida para verificar as solicitações recebidas e assinar os avisos enviados.

O exemplo a seguir define um arquivo dsrdelete.json com um endpoint, identificadores e chave 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
}

Receber um pedido de exclusão de dados

O Google propaga solicitações de exclusão de dados dos editores para você quando todas as condições a seguir são atendidas:

  • Você hospeda um arquivo dsrdelete.json válido em um domínio registrado no Google.
  • O editor envia ao Google uma solicitação de exclusão de dados para um identificador.
  • O Google determina que o identificador do editor enviado na solicitação de exclusão de dados foi compartilhado com você.

Quando você recebe um pedido de exclusão de dados, é sua responsabilidade excluir os dados especificados. Você também precisa continuar propagando a solicitação de exclusão de dados para outros parceiros com quem compartilhou os dados próprios do editor. O Google aceita solicitações de exclusão de dados para os seguintes identificadores:

  • ppid: identificadores fornecidos pelo editor (PPID).
  • pfpid_domain: identificadores próprios do publisher para a Web.
  • idfv: identificadores próprios do publisher para dispositivos iOS.

O Google envia a solicitação de exclusão de dados como uma solicitação HTTP POST para o endpoint especificado no arquivo dsrdelete.json. O corpo da solicitação de exclusão de dados contém um JSON Web Token (JWT) composto pelas seguintes partes:

  • Um cabeçalho JOSE que descreve o algoritmo de criptografia.
  • Um payload JWS que contém a solicitação de exclusão.
  • Uma assinatura JWS para verificar a autenticidade da solicitação.

O Google codifica o cabeçalho, o payload e a assinatura em base64 e formata esses itens da seguinte maneira:

WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD.WEB_SAFE_BASE64_ENCODED_SIGNATURE

Para saber mais sobre os diferentes JWTs usados na estrutura de exclusão de dados, consulte Implementação do JSON Web Token (JWT). A solicitação de exclusão de dados que você recebe do Google é um JWT de solicitação (rqJWT), que inclui o JWT de identidade (idJWT) enviado pelo editor ao solicitar a exclusão.

Encontrar detalhes da validação no cabeçalho

O cabeçalho é um objeto JSON que descreve o algoritmo que você precisa usar para produzir um hash da solicitação, necessário para verificar a autenticidade dela. Se o emissor tiver várias chaves privadas que podem ser usadas para produzir uma assinatura, o cabeçalho também vai identificar qual das chaves públicas do emissor pode ser usada para validar a assinatura.

O exemplo a seguir é um cabeçalho decodificado que mostra que você pode usar o algoritmo RSA256 com o ID da chave abc123 para validar a assinatura:

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

Autenticar a solicitação

Você pode verificar se o Google enviou as solicitações de exclusão de dados com a chave pública no arquivo dsrdelete.json do Google. O arquivo dsrdelete.json do Google está hospedado em https://static.doubleclick.net/dsrdelete.json

Para verificar a autenticidade da solicitação de exclusão de dados, siga estas etapas:

  1. Calcule o hash do cabeçalho e do payload usando o algoritmo identificado no cabeçalho. Os dados transmitidos à sua função de hash precisam usar a seguinte estrutura:

    WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD
    
  2. Use a chave pública especificada no arquivo dsrdelete.json do emissor para descriptografar a assinatura decodificada.

  3. Compare o hash gerado na etapa 1 com o valor descriptografado da assinatura. Se esses itens corresponderem, a solicitação de exclusão de dados será autêntica.

Analisar o payload da solicitação de exclusão

Depois de verificar a autenticidade da solicitação de exclusão de dados, analise o payload para verificar qual identificador excluir. O payload decodificado é um token rqJWT. Para mais detalhes, consulte rqJWT: JWT de "solicitação" do solicitante.

O exemplo a seguir mostra um payload decodificado como um token rqJWT e inclui parâmetros opcionais:

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

A solicitação de exclusão de dados inclui o campo sub, que contém uma string JSON indicando que o publisher está pedindo a exclusão de um PPID com o valor crvBtLjLqNUiafwXZiyukLD4Tf6mMUYhBdQaPZ0pjyd. O token rqJWT inclui o token idJWT codificado. Para mais detalhes, consulte idJWT: JWT do "identificador" do emissor .

Propagar a solicitação de exclusão de dados

Você precisa propagar a solicitação de exclusão de dados para todos os parceiros com quem compartilhou os identificadores especificados. Por exemplo, se você estiver integrado ao Open Bidding, precisará propagar a solicitação de exclusão de dados para os bidders na sua troca com quem o identificador próprio foi compartilhado. Esse processo exige que você envie um token rqJWT aos parceiros de dados. O token rqJWT precisa conter os identificadores relevantes, formatados com base nas configurações no arquivo dsrdelete.json do parceiro de dados. Além disso, o token rqJWT precisa incluir sua assinatura gerada com sua chave privada.

Confirmar o pedido de exclusão de dados

Para confirmar que você recebeu e atendeu à solicitação de exclusão de dados, envie um JWT de confirmação ao endpoint especificado pelo Google no arquivo dsrdelete.json. Para mais detalhes, consulte acJWT: JWT de "confirmação" do destinatário.

O código de status HTTP da sua resposta depende do seguinte resultado:

  • Sucesso: retorne HTTP 202 se a solicitação foi recebida, analisada e processada com êxito.
  • Falha: retorne HTTP 400 se a solicitação não tiver sido recebida, analisada e processada corretamente.

O corpo da solicitação precisa incluir um token acJWT com um payload que preenche o campo raResultCode com um código de resultado inteiro. Você pode fornecer um texto descritivo sobre o resultado no campo raResultString. O token acJWT precisa incluir sua assinatura gerada com a chave privada.

Para saber mais sobre os códigos de resultado aceitos na estrutura de solicitação de exclusão de dados, consulte Códigos de resultado.

Criar o cabeçalho do token acJWT

Preencha o cabeçalho com base na função de hash e na chave pública que você quer que o destinatário use ao verificar sua assinatura. O cabeçalho não codificado no exemplo a seguir indica que você quer que o destinatário use o algoritmo ES256 para gerar o hash e que ele precisa usar a chave pública com o ID EhuduQ do arquivo dsrdelete.json ao descriptografar sua assinatura.

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

Criar o payload do token acJWT

Preencha o payload com base no resultado da solicitação de exclusão e o campo rqJWT com a forma codificada do token rqJWT que você está confirmando. O exemplo a seguir especifica um campo raResultCode com o valor 0 para indicar que a operação foi concluída com êxito:

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