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.jsonvá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:
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_PAYLOADUse a chave pública especificada no arquivo
dsrdelete.jsondo emissor para descriptografar a assinatura decodificada.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 202se a solicitação foi recebida, analisada e processada com êxito. - Falha: retorne
HTTP 400se 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"
}