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

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

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

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

הגדרת השילוב

כדי להתחיל לקבל בקשות ממחיקת נתונים מ-Google, אתם צריכים לרשום דומיין ב-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": "ppuid", "format": "plaintext" },
        { "id": 2, "type": "ifv", "format": "plaintext" },
        { "id": 3, "type": "sco", "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 תומכת בבקשות למחיקת נתונים עבור המזהים הבאים:

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

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

  • כותרת JOSE שמתארת את אלגוריתם ההצפנה.
  • מטען ייעודי (payload) של 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 היא 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 צריך לכלול את החתימה שנוצרה באמצעות המפתח הפרטי שלכם.

מידע נוסף על קודי התוצאות שנתמכים במסגרת הבקשות למחיקת נתונים זמין במאמר קודי תוצאות.

יצירת כותרת של טוקן 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"
}