Một số khu vực có quy định về việc xoá dữ liệu, yêu cầu 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 mã nhận dạng bên thứ nhất và nhận khoảng không quảng cáo từ các khu vực có quy định về việc xoá dữ liệu, thì Google khuyên bạn nên tích hợp với Khuôn khổ yêu cầu xoá dữ liệu của IAB.
Khi người dùng chọn xoá mã nhận dạng của họ khỏi ứng dụng hoặc trang web của nhà xuất bản, Khuôn khổ 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 các 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 bạn có 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 sàn giao dịch 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 cách thiết lập ban đầu chế độ tích hợp Khuôn khổ yêu cầu xoá dữ liệu với sàn giao dịch của Google và cung cấp thông tin tổng quan về quy trình làm việc của Khuôn khổ yêu cầu xoá dữ liệu trong bối cảnh sàn giao dịch của Google. Để được hướng dẫn thêm, hãy xem bài viết Khuôn khổ yêu cầu xoá dữ liệu.
Thiết lập chế độ 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ữ tệp dsrdelete.json ở thư mục gốc của miền đã đăng ký. Để đăng ký miền với Google, hãy liên hệ với người quản lý tài khoản của bạ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 mà Google gửi yêu cầu xoá dữ liệu.
- Liệt kê các mã nhận dạng được hỗ trợ và cách định dạng các mã nhận dạng đó.
- Chỉ định khoá công khai tuân theo 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 xoá dữ liệu hoặc thông báo xác nhận đã truyền 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 bài viết 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. Google khuyên bạn nên sử 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 mà 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 thiết lập một tệp dsrdelete.json có điểm cuối, mã nhận dạng và khoá công khai:
{
"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
}
Nhận yêu cầu xoá dữ liệu
Google truyền yêu cầu xoá dữ liệu từ nhà xuất bản đến bạn khi đáp ứng tất cả các điều kiện sau:
- Bạn lưu trữ một tệp
dsrdelete.jsonhợ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 mã nhận dạng đến Google.
- Google xác định rằng mã nhận dạng của 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 bên thứ nhất của nhà xuất bản. Google hỗ trợ các yêu cầu xoá dữ liệu cho các mã nhận dạng sau:
ppuid: Mã nhận dạng do nhà xuất bản cung cấp.sco: Mã nhận dạng bên thứ nhất của nhà xuất bản cho web.ifv: Mã 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. 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:
- Tiêu đề JOSE mô tả thuật toán mã hoá.
- 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 sử dụng trong khuôn khổ xoá dữ liệu, hãy xem bài viết 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. Điều này là cần thiết để xác minh tính xác thực của yêu cầu. Nếu tổ chức phát hành có nhiều khoá riêng tư mà họ có thể sử dụng để tạo chữ ký, thì tiêu đề cũng xác định khoá công khai nào của tổ chức phát hành mà bạn có thể sử 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ã nhận dạng 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 các 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:
Tính toán hàm băm của tiêu đề và tải trọng bằng thuật toán được xác định trong tiêu đề. Dữ liệu được truyền đến hàm băm của bạn phải sử dụng cấu trúc sau:
WEB_SAFE_BASE64_ENCODED_HEADER.WEB_SAFE_BASE64_ENCODED_PAYLOADSử dụng khoá công khai được chỉ định trong tệp
dsrdelete.jsoncủa tổ chức phát hành để giải mã chữ ký đã giải mã.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 nhau, thì yêu cầu xoá dữ liệu là xác thực.
Phân tích cú pháp tải trọng 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ột mã thông báo rqJWT. Để biết thông tin chi tiết, hãy xem bài viết rqJWT: JWT "yêu cầu" của người 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 bao gồm trường sub, 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ị crvBtLjLqNUiafwXZiyukLD4Tf6mMUYhBdQaPZ0pjyd. Mã thông báo rqJWT bao gồm mã thông báo idJWT đã mã hoá. Để biết thông tin chi tiết, hãy xem bài viết
idJWT: JWT "mã nhận dạng" của tổ chức 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ẻ các mã nhận dạng được chỉ định. Ví dụ: nếu bạn tích hợp với Đặ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 sàn giao dịch mà bạn đã chia sẻ mã nhận dạng bên thứ nhất. Quá 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 mã 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 bao gồm 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 và thực hiện yêu cầu xoá dữ liệu, hãy gửi một 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 bài viết
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:
- Thành công: Trả về
HTTP 202nếu yêu cầu được nhận, phân tích cú pháp và thực hiện thành công. - Thất bại: Trả về
HTTP 400nếu yêu cầu không được nhận, phân tích cú pháp và thực hiện 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ó tải trọng điền vào trường raResultCode bằng mã kết quả số nguyên. Bạn có thể tuỳ ý cung cấp văn bản mô tả về kết quả trong trường raResultString. Mã thông báo acJWT phải bao gồm 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 Khuôn khổ yêu cầu xoá dữ liệu, hãy xem bài viết Mã kết quả.
Tạo tiêu đề mã thông báo acJWT
Điền 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 đây 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 từ tệp dsrdelete.json của bạn 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 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"
}