一部の地域では、パブリッシャーがコンテンツのユーザーにデータの削除をリクエストする手段を提供することを義務付けるデータ削除に関する規制があります。リアルタイム ビッダー統合でファーストパーティ識別子を使用し、データ削除規制のある地域からインベントリを受け取っている場合は、IAB のデータ削除リクエスト フレームワークとの統合をおすすめします。
ユーザーがパブリッシャーのアプリまたはサイトから識別子を削除することを選択すると、データ削除リクエスト フレームワークにより、パブリッシャーはデータ削除リクエストを伝播できます。パブリッシャーはデータ削除リクエストをエクスチェンジに送信します。エクスチェンジは、データ削除リクエストを貴社に伝播できます。データ削除リクエストを受け取った場合は、パブリッシャーのファーストパーティ データを共有したエンティティにリクエストを伝播する必要があります。たとえば、オープン ビッディング統合がある場合は、ファーストパーティ データが共有された取引所のビッダーにリクエストを伝播する必要があります。
このガイドでは、Google エクスチェンジとのデータ削除リクエスト フレームワークの統合の初期設定について説明し、Google エクスチェンジのコンテキスト内でのデータ削除リクエスト フレームワークのワークフローの概要を示します。詳細なガイダンスについては、データ削除リクエスト フレームワークをご覧ください。
統合を設定する
Google からデータ削除リクエストの受信を開始するには、アカウントに関連付けるドメインを Google に登録し、登録したドメインのルートに dsrdelete.json ファイルをホストする必要があります。ドメインを Google に登録するには、アカウント マネージャーにお問い合わせください。dsrdelete.json ファイルには、次のような複数の目的があります。
- Google がデータ削除リクエストを送信するエンドポイントを特定します。
- サポートされている識別子とその形式を一覧表示します。
- JSON Web Key(JWK)標準に準拠した公開鍵を指定します。この公開鍵は、他の当事者が、送信したデータ削除リクエストまたは確認応答の真正性を検証するために使用します。
入力できる必須フィールドや省略可能なフィールドなど、drsdelete.json ファイルの詳細については、検出をご覧ください。
dsrdelete.json ファイルで指定したエンドポイントは、受信したデータ削除リクエストを受信して応答する必要があります。受信したリクエストを検証し、送信する確認応答に署名するには、選択したプログラミング言語の暗号ライブラリを使用することをおすすめします。
次の例では、エンドポイント、識別子、公開鍵を含む 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 はサイト運営者からのデータ削除リクエストをパブリッシャーに伝播します。
- Google に登録したドメインで有効な
dsrdelete.jsonファイルをホストしている。 - パブリッシャーが、識別子のデータ削除リクエストを Google に送信します。
- データ削除リクエストで送信されたパブリッシャー ID が共有されたと Google が判断した場合。
データ削除リクエストを受け取った場合は、指定されたデータを削除する責任があります。また、ファーストパーティ パブリッシャー データを共有した他のデータ パートナーにも、データ削除リクエストを伝播し続ける必要があります。Google は、次の識別子のデータ削除リクエストをサポートしています。
ppid: パブリッシャー指定の識別子(PPID)。pfpid_domain: ウェブ用のパブリッシャーのファーストパーティ識別子。idfv: iOS デバイスのパブリッシャーのファーストパーティ識別子。
Google は、データ削除リクエストを HTTP POST リクエストとして dsrdelete.json ファイルで指定されたエンドポイントに送信します。データ削除リクエストの本文には、次の部分で構成される JSON ウェブトークン(JWT)が含まれています。
- 暗号化アルゴリズムを記述する JOSE ヘッダー。
- 削除リクエストを含む JWS ペイロード。
- リクエストの信頼性を検証するための JWS 署名。
Google は、ヘッダー、ペイロード、署名を base64 でエンコードし、これらの項目を次のようにフォーマットします。
WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD.WEB_SAFE_BASE64_ENCODED_SIGNATURE
データ削除フレームワークで使用される個別の JWT の詳細については、JSON ウェブトークン(JWT)の実装をご覧ください。Google から受け取るデータ削除リクエストはリクエスト JWT(rqJWT)です。これには、パブリッシャーが削除をリクエストしたときに送信した ID JWT(idJWT)が含まれています。
ヘッダーで検証の詳細を確認する
ヘッダーは、リクエストのハッシュを生成するために使用する必要があるアルゴリズムを記述する JSON オブジェクトです。これは、リクエストの信頼性を検証するために必要です。署名の生成に使用できる秘密鍵が複数ある場合、ヘッダーは署名の検証に使用できる発行者の公開鍵も識別します。
次の例は、RSA256 アルゴリズムと鍵 ID abc123 を使用して署名を検証できることを示すデコードされたヘッダーです。
{
"typ": "JWT",
"alg": "RS256",
"kid": "abc123"
}
リクエストを認証する
Google が dsrdelete.json ファイルの公開鍵を使用してデータ削除リクエストを送信したことを確認できます。Google の dsrdelete.json ファイルは https://static.doubleclick.net/dsrdelete.json でホストされています。
データ削除リクエストの真正性を確認する手順は次のとおりです。
ヘッダーで指定されたアルゴリズムを使用して、ヘッダーとペイロードのハッシュを計算します。ハッシュ関数に渡されるデータは、次の構造を使用する必要があります。
WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD発行者の
dsrdelete.jsonファイルで指定された公開鍵を使用して、デコードされた署名を復号します。ステップ 1 で生成したハッシュと、署名から復号した値を比較します。これらの項目が一致する場合、データ削除リクエストは本物です。
削除リクエストのペイロードを解析する
データ削除リクエストの信頼性を確認したら、ペイロードを解析して、削除する ID を確認する必要があります。デコードされたペイロードは rqJWT トークンです。詳細については、rqJWT: リクエスタ「リクエスト」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 フィールドが含まれており、このフィールドには、ニュース メディアが値 crvBtLjLqNUiafwXZiyukLD4Tf6mMUYhBdQaPZ0pjyd の PPID の削除をリクエストしていることを示す JSON 文字列が含まれています。rqJWT トークンには、エンコードされた idJWT トークンが含まれます。詳細については、idJWT: 発行者「識別子」JWT をご覧ください。
データ削除リクエストを伝播する
指定された識別子を共有したデータ パートナーに対して、データ削除リクエストを伝播する必要があります。たとえば、オープン ビッディングと統合している場合は、ファーストパーティ識別子が共有されているエクスチェンジのビッダーにデータ削除リクエストを伝播する必要があります。このプロセスでは、データ パートナーに rqJWT トークンを送信する必要があります。rqJWT トークンには、データ パートナーの dsrdelete.json ファイルの構成に基づいてフォーマットされた関連する識別子が含まれている必要があります。また、rqJWT トークンには、秘密鍵で生成した署名を含める必要があります。
データ削除リクエストを確認する
データ削除リクエストを受信して処理したことを確認応答するには、dsrdelete.json ファイルで Google が指定したエンドポイントに確認応答 JWT を送信します。詳細については、acJWT: 受信者の「確認」JWT をご覧ください。
レスポンスの HTTP ステータス コードは、次の結果によって異なります。
- 成功: リクエストが正常に受信、解析、処理された場合は
HTTP 202を返します。 - 失敗: リクエストが正常に受信、解析、処理されなかった場合は、
HTTP 400を返します。
リクエストの本文には、raResultCode フィールドに整数結果コードを入力するペイロードを含む acJWT トークンを含める必要があります。必要に応じて、raResultString フィールドに結果に関する説明テキストを指定できます。acJWT トークンには、秘密鍵で生成した署名を含める必要があります。
データ削除リクエスト フレームワークでサポートされている結果コードについて詳しくは、結果コードをご覧ください。
acJWT トークン ヘッダーをビルドする
受信者が署名を検証する際に使用するハッシュ関数と公開鍵に基づいてヘッダーを設定します。次の例のエンコードされていないヘッダーは、受信者が ES256 アルゴリズムを使用してハッシュを生成することを意図していること、および署名を復号する際に dsrdelete.json ファイルの鍵 ID EhuduQ の公開鍵を使用する必要があることを示しています。
{
"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"
}