Sử dụng Khung yêu cầu xoá dữ liệu

Một số khu vực có quy định về việc xoá dữ liệu, theo đó, nhà xuất bản phải cung cấp cho người dùng nội dung của họ một phương thức yêu cầu xoá dữ liệu của họ. Nếu chế độ tích hợp Đặt giá thầu theo thời gian thực sử dụng giá trị nhận dạng của bên thứ nhất và nhận khoảng không quảng cáo từ những khu vực có quy định về việc xoá dữ liệu, thì bạn nên tích hợp với Khung yêu cầu xoá dữ liệu của Cục Quảng cáo tương tác (IAB).

Khi người dùng chọn xoá giá trị nhận dạng của họ khỏi ứng dụng hoặc trang web của nhà xuất bản, Khung yêu cầu xoá dữ liệu sẽ cho phép nhà xuất bản truyền yêu cầu xoá dữ liệu. Nhà xuất bản gửi yêu cầu xoá dữ liệu đến các sàn giao dịch. Các sàn giao dịch này có thể truyền yêu cầu xoá dữ liệu đến bạn. Khi nhận được yêu cầu xoá dữ liệu, bạn phải truyền yêu cầu đó đến những thực thể mà bạn đã chia sẻ dữ liệu của bên thứ nhất của nhà xuất bản. Ví dụ: nếu có một chế độ tích hợp Đặt giá thầu mở, bạn phải truyền yêu cầu đến những bên đặt giá thầu trên nền tảng trao đổi mà bạn đã chia sẻ dữ liệu của bên thứ nhất.

Hướng dẫn này trình bày chế độ thiết lập ban đầu của việc tích hợp Khung yêu cầu xoá dữ liệu với Google Exchange, đồng thời cung cấp thông tin tổng quan về quy trình Khung yêu cầu xoá dữ liệu trong bối cảnh của Google Exchange. Để được hướng dẫn thêm, hãy xem Khung yêu cầu xoá dữ liệu.

Thiết lập quy trình tích hợp

Để bắt đầu nhận yêu cầu xoá dữ liệu từ Google, bạn phải đăng ký một miền với Google mà bạn muốn liên kết với tài khoản của mình và lưu trữ một tệp dsrdelete.json ở thư mục gốc của miền đã đăng ký. Để đăng ký miền của bạn với Google, hãy liên hệ với người quản lý tài khoản. Tệp dsrdelete.json phục vụ một số mục đích, chẳng hạn như:

  • Xác định điểm cuối nơi Google gửi yêu cầu xoá dữ liệu.
  • Liệt kê các giá trị nhận dạng được hỗ trợ và cách định dạng các giá trị nhận dạng đó.
  • Chỉ định các khoá công khai tuân thủ tiêu chuẩn Khoá web JSON (JWK) mà các bên khác sử dụng để xác minh tính xác thực của các yêu cầu hoặc thông báo xoá dữ liệu đã truyền bá mà bạn gửi.

Để biết thông tin chi tiết về tệp drsdelete.json, chẳng hạn như các trường bắt buộc và không bắt buộc mà bạn có thể điền, hãy xem phần Khám phá.

Điểm cuối mà bạn chỉ định trong tệp dsrdelete.json phải nhận và phản hồi các yêu cầu xoá dữ liệu đến. Bạn nên dùng một thư viện mật mã cho ngôn ngữ lập trình mà bạn chọn để xác minh các yêu cầu bạn nhận được và ký các thông báo xác nhận mà bạn gửi.

Ví dụ sau đây đặt một tệp dsrdelete.json có điểm cuối, giá trị nhận dạng và khoá công khai:

{
    "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
}

Nhận yêu cầu xoá dữ liệu

Google sẽ truyền yêu cầu xoá dữ liệu từ nhà xuất bản đến bạn khi tất cả các điều kiện sau đây được đáp ứng:

  • Bạn lưu trữ một tệp dsrdelete.json hợp lệ tại một miền đã đăng ký với Google.
  • Nhà xuất bản gửi yêu cầu xoá dữ liệu cho một giá trị nhận dạng đến Google.
  • Google xác định rằng giá trị nhận dạng nhà xuất bản được gửi trong yêu cầu xoá dữ liệu đã được chia sẻ với bạn.

Khi nhận được yêu cầu xoá dữ liệu, bạn có trách nhiệm xoá dữ liệu được chỉ định. Bạn cũng phải tiếp tục truyền yêu cầu xoá dữ liệu đến các đối tác dữ liệu khác mà bạn đã chia sẻ dữ liệu của nhà xuất bản bên thứ nhất. Google hỗ trợ các yêu cầu xoá dữ liệu đối với những giá trị nhận dạng sau:

  • ppid: Giá trị nhận dạng do nhà xuất bản cung cấp (PPID).
  • pfpid_domain: Giá trị nhận dạng bên thứ nhất của nhà xuất bản cho web.
  • idfv: Giá trị nhận dạng bên thứ nhất của nhà xuất bản cho thiết bị iOS.

Google gửi yêu cầu xoá dữ liệu dưới dạng yêu cầu HTTP POST đến điểm cuối được chỉ định trong tệp dsrdelete.json của bạn. Nội dung của yêu cầu xoá dữ liệu chứa một Mã thông báo web JSON (JWT) bao gồm các phần sau:

  • Một Tiêu đề JOSE mô tả thuật toán mã hoá.
  • Một tải trọng JWS chứa yêu cầu xoá.
  • Chữ ký JWS để xác minh tính xác thực của yêu cầu.

Google mã hoá tiêu đề, tải trọng và chữ ký ở định dạng base64, đồng thời định dạng các mục này như sau:

WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD.WEB_SAFE_BASE64_ENCODED_SIGNATURE

Để tìm hiểu thêm về các JWT riêng biệt được dùng trong khung xoá dữ liệu, hãy xem phần Triển khai mã thông báo web JSON (JWT). Yêu cầu xoá dữ liệu mà bạn nhận được từ Google là một JWT yêu cầu (rqJWT), bao gồm cả JWT danh tính (idJWT) mà nhà xuất bản đã gửi khi yêu cầu xoá.

Tìm thông tin xác thực trong tiêu đề

Tiêu đề là một đối tượng JSON mô tả thuật toán mà bạn phải sử dụng để tạo hàm băm của yêu cầu. Hàm băm này là cần thiết để xác minh tính xác thực của yêu cầu. Nếu nhà phát hành có nhiều khoá riêng tư mà họ có thể dùng để tạo chữ ký, thì tiêu đề cũng xác định khoá công khai nào của nhà phát hành mà bạn có thể dùng để xác thực chữ ký.

Ví dụ sau đây là một tiêu đề đã giải mã cho thấy bạn có thể sử dụng thuật toán RSA256 với mã khoá abc123 để xác thực chữ ký:

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

Xác thực yêu cầu

Bạn có thể xác minh rằng Google đã gửi yêu cầu xoá dữ liệu bằng khoá công khai trong tệp dsrdelete.json của Google. Tệp dsrdelete.json của Google được lưu trữ tại https://static.doubleclick.net/dsrdelete.json

Để xác minh tính xác thực của yêu cầu xoá dữ liệu, hãy làm theo các bước sau:

  1. Tính toán hàm băm của tiêu đề và tải trọng bằng cách sử dụng thuật toán được xác định trong tiêu đề. Dữ liệu được truyền đến hàm băm phải sử dụng cấu trúc sau:

    WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOAD
    
  2. Sử dụng khoá công khai được chỉ định trong tệp dsrdelete.json của tổ chức phát hành để giải mã chữ ký đã giải mã.

  3. So sánh hàm băm mà bạn đã tạo ở bước một với giá trị đã giải mã từ chữ ký. Nếu các mục này khớp với nhau, thì yêu cầu xoá dữ liệu là hợp lệ.

Phân tích cú pháp tải trọng của yêu cầu xoá

Sau khi xác minh tính xác thực của yêu cầu xoá dữ liệu, bạn phải phân tích cú pháp tải trọng để xác minh mã nhận dạng cần xoá. Tải trọng đã giải mã là mã thông báo rqJWT. Để biết thông tin chi tiết, hãy xem phần rqJWT: JWT "yêu cầu" của bên yêu cầu.

Ví dụ sau đây cho thấy một tải trọng đã giải mã dưới dạng mã thông báo rqJWT và bao gồm các tham số không bắt buộc:

{
    "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"
}

Yêu cầu xoá dữ liệu có chứa trường sub. Trường này chứa một chuỗi JSON cho biết rằng nhà xuất bản đang yêu cầu xoá một PPID có giá trị là crvBtLjLqNUiafwXZiyukLD4Tf6mMUYhBdQaPZ0pjyd. Mã thông báo rqJWT bao gồm mã thông báo idJWT được mã hoá. Để biết thông tin chi tiết, hãy xem idJWT: JWT "giá trị nhận dạng" của đơn vị phát hành .

Truyền yêu cầu xoá dữ liệu

Bạn phải truyền yêu cầu xoá dữ liệu đến mọi đối tác dữ liệu mà bạn đã chia sẻ giá trị nhận dạng được chỉ định. Ví dụ: nếu được tích hợp với tính năng Đặt giá thầu mở, bạn phải truyền yêu cầu xoá dữ liệu đến những bên đặt giá thầu trên nền tảng trao đổi mà bạn đã chia sẻ mã nhận dạng bên thứ nhất. Quy trình này yêu cầu bạn gửi mã thông báo rqJWT cho các đối tác dữ liệu. Mã thông báo rqJWT phải chứa các giá trị nhận dạng có liên quan, được định dạng dựa trên cấu hình trong tệp dsrdelete.json của đối tác dữ liệu. Ngoài ra, mã thông báo rqJWT phải có chữ ký do bạn tạo bằng khoá riêng tư.

Xác nhận yêu cầu xoá dữ liệu

Để xác nhận rằng bạn đã nhận được và xử lý yêu cầu xoá dữ liệu, hãy gửi JWT Xác nhận đến điểm cuối mà Google chỉ định trong tệp dsrdelete.json. Để biết thông tin chi tiết, hãy xem phần acJWT: JWT "xác nhận" của người nhận.

Mã trạng thái HTTP của phản hồi phụ thuộc vào kết quả sau:

  • Success (Thành công): Trả về HTTP 202 nếu yêu cầu đã được nhận, phân tích cú pháp và xử lý thành công.
  • Thất bại: Trả về HTTP 400 nếu yêu cầu không được nhận, phân tích cú pháp và xử lý thành công.

Nội dung yêu cầu phải bao gồm một mã thông báo acJWT có trọng tải điền vào trường raResultCode bằng mã kết quả là số nguyên. Bạn có thể cung cấp văn bản mô tả (không bắt buộc) về kết quả trong trường raResultString. Mã thông báo acJWT phải có chữ ký do bạn tạo bằng khoá riêng tư.

Để tìm hiểu thêm về các mã kết quả được hỗ trợ trong Khung yêu cầu xoá dữ liệu, hãy xem phần Mã kết quả.

Tạo tiêu đề mã thông báo acJWT

Điền thông tin vào tiêu đề dựa trên hàm băm và khoá công khai mà bạn muốn người nhận sử dụng khi xác minh chữ ký của bạn. Tiêu đề chưa mã hoá trong ví dụ sau cho biết rằng bạn muốn người nhận sử dụng thuật toán ES256 để tạo hàm băm và người nhận phải sử dụng khoá công khai có mã nhận dạng khoá EhuduQ trong tệp dsrdelete.json khi giải mã chữ ký của bạn.

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

Tạo tải trọng mã thông báo acJWT

Điền sẵn tải trọng dựa trên kết quả của yêu cầu xoá và điền sẵn trường rqJWT bằng dạng mã hoá của mã thông báo rqJWT mà bạn đang xác nhận. Ví dụ sau đây chỉ định một trường raResultCode có giá trị 0 để cho biết rằng thao tác đã thành công:

{
    "version": "1.0",
    "jti": "965492b2-74e5-409a-90f4-f041902db05f",
    "raResultString": "",
    "iat": 1756408212,
    "iss": "doubleclick.net",
    "raResultCode": 0,
    "rqJWT": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVodWR1USJ9.eyJvcHRpb25hbFBhcmFtZXRlcnMiOiJ7XCJnYW1OZXR3b3JrQ29kZVwiOlwiMzExMDU3XCJ9Iiwic3ViIjoie1xuICAgIFwiaWRlbnRpZmllclZhbHVlXCI6IFwiY3J2QnRMakxxTlVpYWZ3WFppeXVrTEQ0VGY2bU1VWWhCZFFhUFowcGp5ZFwiLFxuICAgIFwiaWRlbnRpZmllclR5cGVcIjogXCJwcGlkXCIsXG4gICAgXCJpZGVudGlmaWVyRm9ybWF0XCI6IFwicGxhaW50ZXh0XCJcbiAgfSIsImlhdCI6MTc1NjI1Nzk1MSwidmVyc2lvbiI6IjEuMCIsImlzcyI6InRlc3RfcHVibGlzaGVyIiwiaWRKV1QiOiJleUpoYkdjaU9pSkZVekkxTmlJc0ltdHBaQ0k2SWtWb2RXUjFVU0lzSW5SNWNDSTZJa3BYVkNKOS5leUpwYzNNaU9pSjBaWE4wWDNCMVlteHBjMmhsY2lJc0luTjFZaUk2SW50Y2JpQWdJQ0JjSW1sa1pXNTBhV1pwWlhKV1lXeDFaVndpT2lCY0ltTnlka0owVEdwTWNVNVZhV0ZtZDFoYWFYbDFhMHhFTkZSbU5tMU5WVmxvUW1SUllWQmFNSEJxZVdSY0lpeGNiaUFnSUNCY0ltbGtaVzUwYVdacFpYSlVlWEJsWENJNklGd2ljSEJwWkZ3aUxGeHVJQ0FnSUZ3aWFXUmxiblJwWm1sbGNrWnZjbTFoZEZ3aU9pQmNJbkJzWVdsdWRHVjRkRndpWEc0Z0lIMGlMQ0pwWVhRaU9qRTNOVFl5TlRjNU5URXNJblpsY25OcGIyNGlPaUl4TGpBaWZRLkRoMTdmdjFzeEtNbmtPYTdIT1dmVmRzSVlvOEJCeTJwOVNrRFRTZlpvVzZ5cE1kbF81d0RZdFVJWUVmdVgzbjZVYndNb0gwV1ZnR1FuRlFyYU1INlhRIn0.zZnuUsUDzkARg31RzkhLOJCSXD5jPca8qff5IqyYrrRITgRgm29T__6gC3oOOK5RAcd_AFFYWzE8onx6Kj1w8A"
}