В некоторых регионах действуют правила удаления данных, которые обязывают издателей предоставлять пользователям своего контента возможность запросить удаление данных. Если ваша интеграция с Real-time Bidding использует собственные идентификаторы и получает инвентарь из регионов, где действуют правила удаления данных, Google рекомендует вам интегрироваться с фреймворком запросов на удаление данных IAB .
Когда пользователь решает удалить свои идентификаторы из приложения или сайта издателя, фреймворк запросов на удаление данных позволяет издателю распространить запрос на удаление данных. Издатель отправляет запрос на удаление данных биржам, которые могут распространить его на вас. Получив запрос на удаление данных, вы должны распространить его тем организациям, с которыми вы поделились собственными данными издателя. Например, если у вас есть интеграция с Open Bidding, вы должны распространить запрос участникам торгов на вашей бирже, с которыми были предоставлены собственные данные.
В этом руководстве описывается начальная настройка интеграции Data Deletion Request Framework с Google Exchange, а также представлен обзор рабочего процесса Data Deletion Request Framework в контексте Google Exchange. Дополнительные инструкции см. в разделе Data Deletion Request Framework .
Настройте свою интеграцию
Чтобы начать получать запросы на удаление данных от Google, вам необходимо зарегистрировать домен, который вы хотите связать с вашей учётной записью, и разместить файл dsrdelete.json в корневой папке зарегистрированного домена. Чтобы зарегистрировать домен в Google, обратитесь к своему менеджеру по работе с клиентами. Файл dsrdelete.json служит нескольким целям, например:
- Определение конечной точки, куда Google отправляет запросы на удаление данных.
- Перечисление поддерживаемых идентификаторов и их форматирование.
- Укажите ваши открытые ключи, соответствующие стандарту JSON Web Key (JWK), которые другие стороны используют для проверки подлинности передаваемых вами запросов на удаление данных или подтверждений.
Подробную информацию о файле drsdelete.json , например, об обязательных и необязательных полях, которые можно заполнить, см. в разделе Discovery .
Ваша конечная точка, указанная в файле dsrdelete.json должна принимать входящие запросы на удаление данных и отвечать на них. Google рекомендует использовать криптографическую библиотеку для выбранного вами языка программирования для проверки получаемых запросов и подписи отправляемых подтверждений.
В следующем примере задается файл dsrdelete.json с конечной точкой, идентификаторами и открытым ключом:
{
"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
}
Получить запрос на удаление данных
Google передает вам запросы на удаление данных от издателей при соблюдении всех следующих условий:
- Вы размещаете действительный файл
dsrdelete.jsonна домене, зарегистрированном в Google. - Издатель отправляет в Google запрос на удаление данных идентификатора.
- Google определяет, что идентификатор издателя, отправленный в запросе на удаление данных, был вам предоставлен.
Получив запрос на удаление данных, вы несёте ответственность за удаление указанных данных. Вы также обязаны продолжить распространение запроса на удаление данных среди других партнёров, с которыми вы поделились данными собственного издателя. Google поддерживает запросы на удаление данных для следующих идентификаторов:
-
ppid: Идентификаторы, предоставленные издателем (PPID). -
pfpid_domain: собственные идентификаторы издателя для веб-сайтов. -
idfv: собственные идентификаторы издателя для устройств iOS.
Google отправляет запрос на удаление данных как HTTP-запрос POST на конечную точку, указанную в файле dsrdelete.json . Тело запроса на удаление данных содержит JSON Web Token (JWT), состоящий из следующих частей:
- Заголовок JOSE , описывающий алгоритм шифрования.
- Полезная нагрузка JWS, содержащая запрос на удаление.
- Подпись JWS для проверки подлинности запроса.
Google кодирует заголовок, полезную нагрузку и подпись в формате base64 и форматирует эти элементы следующим образом:
WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD.WEB_SAFE_BASE64_ENCODED_SIGNATURE
Чтобы узнать больше о различных JWT, используемых в фреймворке для удаления данных, см. раздел «Реализация JSON Web Token (JWT)» . Запрос на удаление данных, который вы получаете от Google, представляет собой JWT-запрос (rqJWT), включающий JWT-идентификатор (idJWT), отправленный издателем при запросе на удаление.
Подробности проверки смотрите в заголовке.
Заголовок представляет собой JSON-объект, описывающий алгоритм, который необходимо использовать для создания хэша запроса, необходимого для проверки его подлинности. Если у эмитента есть несколько закрытых ключей, которые можно использовать для создания подписи, заголовок также определяет, какой из открытых ключей эмитента можно использовать для проверки подписи.
Следующий пример представляет собой декодированный заголовок, показывающий, что для проверки подписи можно использовать алгоритм RSA256 с идентификатором ключа abc123 :
{
"typ": "JWT",
"alg": "RS256",
"kid": "abc123"
}
Подтвердите запрос
Вы можете убедиться, что Google отправил запросы на удаление данных с помощью открытого ключа в файле Google dsrdelete.json . Файл Google dsrdelete.json размещён по адресу https://static.doubleclick.net/dsrdelete.json.
Чтобы проверить подлинность запроса на удаление данных, выполните следующие действия:
Вычислите хеш заголовка и полезной нагрузки, используя алгоритм, указанный в заголовке. Данные, передаваемые в функцию хеширования, должны иметь следующую структуру:
WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOADДля расшифровки декодированной подписи используйте открытый ключ, указанный в файле
dsrdelete.jsonэмитента.Сравните хеш, сгенерированный на первом этапе, с расшифрованным значением из подписи. Если они совпадают, запрос на удаление данных является подлинным.
Анализ полезной нагрузки запроса на удаление
После проверки подлинности запроса на удаление данных необходимо проанализировать полезную нагрузку, чтобы определить, какой идентификатор следует удалить. Декодированная полезная нагрузка представляет собой токен rqJWT. Подробнее см. в разделе rqJWT: Requester «request» JWT .
В следующем примере показана декодированная полезная нагрузка в виде токена rqJWT и включены необязательные параметры:
{
"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"
}
Запрос на удаление данных включает sub , содержащее строку JSON, указывающую на то, что издатель запрашивает удаление PPID со значением crvBtLjLqNUiafwXZiyukLD4Tf6mMUYhBdQaPZ0pjyd . Токен rqJWT включает закодированный токен idJWT. Подробнее см. в разделе idJWT: «Идентификатор» JWT эмитента .
Распространить запрос на удаление данных
Вам необходимо распространить запрос на удаление данных всем партнёрам по обработке данных, с которыми вы поделились указанными идентификаторами. Например, если вы интегрированы с Open Bidding, вам необходимо распространить запрос на удаление данных среди участников торгов на вашей бирже, с которыми был предоставлен основной идентификатор. Для этого вам необходимо отправить партнёрам по обработке данных токен rqJWT. Токен rqJWT должен содержать соответствующие идентификаторы, отформатированные на основе конфигураций в файле dsrdelete.json партнёра по обработке данных. Кроме того, токен rqJWT должен включать вашу подпись, сгенерированную с помощью вашего закрытого ключа.
Подтвердите запрос на удаление данных
Чтобы подтвердить получение запроса на удаление данных и выполнение соответствующих действий, отправьте JWT-токен Acknowledgement на конечную точку, указанную Google в файле dsrdelete.json . Подробнее см. в разделе acJWT: JWT-токен «acknowledgement» получателя .
HTTP-код статуса вашего ответа зависит от следующего результата:
- Успех : вернуть
HTTP 202если запрос был успешно получен, проанализирован и обработан. - Ошибка : вернуть
HTTP 400если запрос не был успешно получен, проанализирован и обработан.
Тело запроса должно включать токен acJWT с полезной нагрузкой, которая заполняет поле raResultCode целочисленным кодом результата. При желании вы можете предоставить текстовое описание результата в поле raResultString . Токен acJWT должен включать вашу подпись, сгенерированную с помощью вашего закрытого ключа.
Дополнительную информацию о кодах результатов, поддерживаемых в Data Deletion Request Framework, см. в разделе Коды результатов .
Создайте заголовок токена acJWT
Заполните заголовок на основе хэш-функции и открытого ключа, которые получатель должен использовать при проверке вашей подписи. Незакодированный заголовок в следующем примере указывает на то, что вы предполагаете, что получатель будет использовать алгоритм ES256 для генерации хэша, и что получатель должен использовать открытый ключ с идентификатором EhuduQ из файла dsrdelete.json при расшифровке вашей подписи.
{
"alg": "ES256",
"typ": "JWT",
"kid": "EhuduQ"
}
Создание полезной нагрузки токена acJWT
Заполните полезную нагрузку на основе результата запроса на удаление и заполните поле rqJWT закодированной формой токена rqJWT, который вы подтверждаете. В следующем примере поле raResultCode задаётся со значением 0 , что указывает на успешность операции:
{
"version": "1.0",
"jti": "965492b2-74e5-409a-90f4-f041902db05f",
"raResultString": "",
"iat": 1756408212,
"iss": "doubleclick.net",
"raResultCode": 0,
"rqJWT": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVodWR1USJ9.eyJvcHRpb25hbFBhcmFtZXRlcnMiOiJ7XCJnYW1OZXR3b3JrQ29kZVwiOlwiMzExMDU3XCJ9Iiwic3ViIjoie1xuICAgIFwiaWRlbnRpZmllclZhbHVlXCI6IFwiY3J2QnRMakxxTlVpYWZ3WFppeXVrTEQ0VGY2bU1VWWhCZFFhUFowcGp5ZFwiLFxuICAgIFwiaWRlbnRpZmllclR5cGVcIjogXCJwcGlkXCIsXG4gICAgXCJpZGVudGlmaWVyRm9ybWF0XCI6IFwicGxhaW50ZXh0XCJcbiAgfSIsImlhdCI6MTc1NjI1Nzk1MSwidmVyc2lvbiI6IjEuMCIsImlzcyI6InRlc3RfcHVibGlzaGVyIiwiaWRKV1QiOiJleUpoYkdjaU9pSkZVekkxTmlJc0ltdHBaQ0k2SWtWb2RXUjFVU0lzSW5SNWNDSTZJa3BYVkNKOS5leUpwYzNNaU9pSjBaWE4wWDNCMVlteHBjMmhsY2lJc0luTjFZaUk2SW50Y2JpQWdJQ0JjSW1sa1pXNTBhV1pwWlhKV1lXeDFaVndpT2lCY0ltTnlka0owVEdwTWNVNVZhV0ZtZDFoYWFYbDFhMHhFTkZSbU5tMU5WVmxvUW1SUllWQmFNSEJxZVdSY0lpeGNiaUFnSUNCY0ltbGtaVzUwYVdacFpYSlVlWEJsWENJNklGd2ljSEJwWkZ3aUxGeHVJQ0FnSUZ3aWFXUmxiblJwWm1sbGNrWnZjbTFoZEZ3aU9pQmNJbkJzWVdsdWRHVjRkRndpWEc0Z0lIMGlMQ0pwWVhRaU9qRTNOVFl5TlRjNU5URXNJblpsY25OcGIyNGlPaUl4TGpBaWZRLkRoMTdmdjFzeEtNbmtPYTdIT1dmVmRzSVlvOEJCeTJwOVNrRFRTZlpvVzZ5cE1kbF81d0RZdFVJWUVmdVgzbjZVYndNb0gwV1ZnR1FuRlFyYU1INlhRIn0.zZnuUsUDzkARg31RzkhLOJCSXD5jPca8qff5IqyYrrRITgRgm29T__6gC3oOOK5RAcd_AFFYWzE8onx6Kj1w8A"
}