שימוש במסגרת של בקשות למחיקת נתונים

באזורים מסוימים יש תקנות למחיקת נתונים שמחייבות בעלי תוכן דיגיטלי לספק למשתמשים בתוכן שלהם אמצעי לבקשת מחיקה של הנתונים שלהם. אם השילוב שלכם עם בידינג בזמן אמת (RTB) משתמש במזהים מאינטראקציה ישירה (First-Party) ומקבל מלאי שטחי פרסום מאזורים שחלים עליהם תקנות בנושא מחיקת נתונים, Google ממליצה לכם לבצע שילוב עם המסגרת של IAB לבקשות מחיקת נתונים.

כשמשתמש בוחר למחוק את המזהים שלו מאתר או מאפליקציה של בעל תוכן דיגיטלי, מסגרת הבקשות למחיקת נתונים מאפשרת לבעל התוכן הדיגיטלי להפיץ בקשה למחיקת נתונים. בעל התוכן הדיגיטלי שולח בקשה למחיקת נתונים לבורסות, שיכולות להעביר את הבקשה למחיקת נתונים אליכם. כשאתם מקבלים בקשה למחיקת נתונים, אתם צריכים להעביר את הבקשה לישויות ששיתפתם איתן את הנתונים מאינטראקציה ישירה (First-Party) של בעל האפליקציה. לדוגמה, אם יש לכם שילוב של Open Bidding, אתם צריכים להעביר את הבקשה למשתתפים במכרז בבורסת הפרסום שאיתה שיתפתם את הנתונים מאינטראקציה ישירה (First-Party).

במדריך הזה מוסבר איך להגדיר את השילוב של Data Deletion Request Framework עם Google Exchange, ומוצגת סקירה כללית של תהליך העבודה של Data Deletion Request Framework בהקשר של Google Exchange. למידע נוסף אפשר לעיין במאמר בנושא מסגרת לבקשות למחיקת נתונים.

הגדרת השילוב

כדי להתחיל לקבל בקשות למחיקת נתונים מ-Google, צריך לרשום דומיין ב-Google שרוצים לשייך לחשבון, ולארח קובץ dsrdelete.json בבסיס הדומיין הרשום. כדי לרשום את הדומיין שלכם ב-Google, פנו לנציג של חשבון 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 קובעת שמזהה בעל התוכן הדיגיטלי שנשלח בבקשה למחיקת נתונים שותף איתך.

כשאתם מקבלים בקשה למחיקת נתונים, אתם אחראים למחוק את הנתונים שצוינו. בנוסף, עליכם להמשיך להעביר את הבקשה למחיקת נתונים לשותפי נתונים אחרים שאיתם שיתפתם את הנתונים מאינטראקציות ישירות (First-Party) של בעל האפליקציה. ‫Google תומכת בבקשות למחיקת נתונים עבור המזהים הבאים:

  • ppid: מזהים שסופקו על ידי בעל התוכן הדיגיטלי (PPID).
  • pfpid_domain: מזהים מאינטראקציה ישירה (First-Party) של בעל האפליקציה לאינטרנט.
  • idfv: מזהים מאינטראקציה ישירה של בעל האפליקציה למכשירי iOS.

‫Google שולחת את בקשת מחיקת הנתונים כבקשת HTTP POST לנקודת הקצה שצוינה בקובץ dsrdelete.json. גוף בקשת מחיקת הנתונים מכיל אסימון רשת מבוסס JSON‏ (JWT) שמורכב מהחלקים הבאים:

  • כותרת JOSE שמתארת את אלגוריתם ההצפנה.
  • מטען ייעודי (payload) של JWS שמכיל את בקשת המחיקה.
  • חתימת JWS לאימות האותנטיות של הבקשה.

‫Google מקודדת את הכותרת, המטען הייעודי (payload) והחתימה ב-base64, ומעצבת את הפריטים האלה באופן הבא:

WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD.WEB_SAFE_BASE64_ENCODED_SIGNATURE

מידע נוסף על אסימוני ה-JWT השונים שמשמשים במסגרת מחיקת הנתונים זמין במאמר הטמעה של JSON Web Token ‏ (JWT). בקשת מחיקת הנתונים שאתם מקבלים מ-Google היא Request JWT ‏ (rqJWT), שכוללת את Identity JWT ‏ (idJWT) שנשלח על ידי בעל התוכן הדיגיטלי כשביקש את המחיקה.

איפה אפשר למצוא את פרטי האימות בכותרת

הכותרת היא אובייקט JSON שמתאר את האלגוריתם שבו צריך להשתמש כדי ליצור גיבוב של הבקשה, שנדרש לאימות האותנטיות של הבקשה. אם למנפיק יש כמה מפתחות פרטיים שהוא יכול להשתמש בהם כדי ליצור חתימה, הכותרת גם מזהה את המפתחות הציבוריים של המנפיק שבהם אפשר להשתמש כדי לאמת את החתימה.

בדוגמה הבאה מוצגת כותרת מפוענחת שבה אפשר לראות שאפשר להשתמש באלגוריתם RSA256 עם מזהה המפתח abc123 כדי לאמת את החתימה:

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

אימות הבקשה

אפשר לאמת ש-Google שלחה את הבקשות למחיקת נתונים באמצעות המפתח הציבורי בקובץ dsrdelete.json של Google. קובץ dsrdelete.json של Google מאוחסן בכתובת https://static.doubleclick.net/dsrdelete.json

כדי לאמת את האותנטיות של הבקשה למחיקת הנתונים, צריך לפעול לפי השלבים הבאים:

  1. מחשבים את הגיבוב של הכותרת ושל המטען הייעודי (payload) באמצעות האלגוריתם שצוין בכותרת. הנתונים שמועברים לפונקציית הגיבוב צריכים להיות במבנה הבא:

    WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD
    
  2. משתמשים במפתח הציבורי שצוין בקובץ dsrdelete.json של המנפיק כדי לפענח את החתימה המפוענחת.

  3. משווים את הגיבוב שיצרתם בשלב הראשון לערך המפוענח מהחתימה. אם הפריטים האלה זהים, הבקשה למחיקת נתונים היא אותנטית.

ניתוח של מטען הייעודי (payload) של בקשת המחיקה

אחרי שמאמתים את האותנטיות של בקשת מחיקת הנתונים, צריך לנתח את מטען הנתונים כדי לוודא איזה מזהה צריך למחוק. המטען הייעודי (payload) שפוענח הוא אסימון 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: Issuer “identifier” JWT .

הפצת הבקשה למחיקת נתונים

עליך להעביר את הבקשה למחיקת נתונים לכל שותפי הנתונים שאיתם שיתפת את המזהים שצוינו. לדוגמה, אם אתם משתמשים ב-Open Bidding, אתם צריכים להעביר את בקשת מחיקת הנתונים למשתתפים במכרז בבורסת הפרסום שלכם שאיתם שיתפתם את המזהה מאינטראקציה ישירה. במסגרת התהליך הזה, צריך לשלוח לשותפי הנתונים אסימון rqJWT. הטוקן rqJWT צריך להכיל את המזהים הרלוונטיים, בפורמט שנקבע בהגדרות בקובץ dsrdelete.json של שותף הנתונים. בנוסף, אסימון ה-rqJWT צריך לכלול את החתימה שלכם שנוצרה באמצעות המפתח הפרטי שלכם.

אישור קבלת הבקשה למחיקת נתונים

כדי לאשר שקיבלתם את בקשת מחיקת הנתונים ופעלתם בהתאם, אתם צריכים לשלוח JWT אישור לנקודת הקצה ש-Google מציינת בקובץ dsrdelete.json. פרטים נוספים זמינים במאמר בנושא acJWT: אישור קבלה של JWT.

קוד הסטטוס של ה-HTTP בתגובה שלכם תלוי בתוצאה הבאה:

  • הצלחה: החזרת HTTP 202 אם הבקשה התקבלה, נותחה ובוצעה בהצלחה.
  • כשל: הפונקציה מחזירה HTTP 400 אם הבקשה לא התקבלה, לא נותחה ולא בוצעה בהצלחה.

גוף הבקשה חייב לכלול טוקן acJWT עם מטען ייעודי (payload) שמאכלס את השדה raResultCode עם קוד תוצאה של מספר שלם. אפשר גם להוסיף טקסט תיאורי על התוצאה בשדה raResultString. אסימון ה-acJWT צריך לכלול את החתימה שנוצרה באמצעות המפתח הפרטי שלכם.

מידע נוסף על קודי התוצאות שנתמכים ב-Data Deletion Request Framework (מסגרת בקשות למחיקת נתונים) זמין במאמר קודי תוצאות.

יצירת כותרת של טוקן acJWT

ממלאים את הכותרת על סמך פונקציית הגיבוב והמפתח הציבורי שרוצים שהנמען ישתמש בהם כדי לאמת את החתימה. הכותרת הלא מקודדת בדוגמה הבאה מציינת שאתם רוצים שהנמען ישתמש באלגוריתם ES256 כדי ליצור את הגיבוב, ושהנמען צריך להשתמש במפתח הציבורי עם מזהה המפתח EhuduQ מהקובץ dsrdelete.json כשמפענחים את החתימה.

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

יצירת מטען ייעודי (payload) של טוקן acJWT

מאכלסים את מטען הייעודי (payload) על סמך התוצאה של בקשת המחיקה, ומאכלסים את השדה 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"
}