일부 지역에는 게시자가 콘텐츠 사용자에게 데이터 삭제를 요청할 수 있는 수단을 제공해야 한다는 데이터 삭제 규정이 있습니다. 실시간 입찰 통합에서 퍼스트 파티 식별자를 사용하고 데이터 삭제 규정이 있는 지역의 인벤토리를 수신하는 경우 IAB의 데이터 삭제 요청 프레임워크와 통합하는 것이 좋습니다.
사용자가 게시자의 앱 또는 사이트에서 식별자를 삭제하기로 선택하면 데이터 삭제 요청 프레임워크를 통해 게시자가 데이터 삭제 요청을 전파할 수 있습니다. 게시자가 데이터 삭제 요청을 거래소에 전송하며, 거래소는 데이터 삭제 요청을 사용자에게 전파할 수 있습니다. 데이터 삭제 요청을 받으면 게시자의 퍼스트 파티 데이터를 공유한 법인에 요청을 전파해야 합니다. 예를 들어 Open Bidding 통합이 있는 경우 퍼스트 파티 데이터가 공유된 거래소의 입찰자에게 요청을 전파해야 합니다.
이 가이드에서는 Google 거래소와의 데이터 삭제 요청 프레임워크 통합의 초기 설정을 다루고 Google 거래소의 맥락에서 데이터 삭제 요청 프레임워크 워크플로를 간략하게 설명합니다. 자세한 안내는 데이터 삭제 요청 프레임워크를 참고하세요.
통합 설정
Google로부터 데이터 삭제 요청을 받기 시작하려면 계정과 연결할 도메인을 Google에 등록하고 등록된 도메인의 루트에 dsrdelete.json 파일을 호스팅해야 합니다. Google에 도메인을 등록하려면 계정 관리자에게 문의하세요. dsrdelete.json 파일은 다음과 같은 여러 용도로 사용됩니다.
- Google에서 데이터 삭제 요청을 전송하는 엔드포인트를 식별합니다.
- 지원되는 식별자와 형식을 나열합니다.
- JSON 웹 키 (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에 보냅니다.
- 데이터 삭제 요청에 전송된 게시자 식별자가 공유된 것으로 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 객체입니다. 요청의 진위성을 확인하는 데 필요합니다. 발급자에게 서명을 생성하는 데 사용할 수 있는 비공개 키가 여러 개 있는 경우 헤더는 서명을 검증하는 데 사용할 수 있는 발급자의 공개 키도 식별합니다.
다음 예시는 키 ID abc123로 RSA256 알고리즘을 사용하여 서명을 검증할 수 있음을 보여주는 디코딩된 헤더입니다.
{
"typ": "JWT",
"alg": "RS256",
"kid": "abc123"
}
요청 인증
Google이 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단계에서 생성한 해시를 서명에서 복호화된 값과 비교합니다. 이 항목이 일치하면 데이터 삭제 요청이 진짜입니다.
삭제 요청 페이로드 파싱
데이터 삭제 요청의 진위 여부를 확인한 후 페이로드를 파싱하여 삭제할 식별자를 확인해야 합니다. 디코딩된 페이로드는 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"
}
데이터 삭제 요청에는 값이 crvBtLjLqNUiafwXZiyukLD4Tf6mMUYhBdQaPZ0pjyd인 PPID의 삭제를 게시자가 요청하고 있음을 나타내는 JSON 문자열이 포함된 sub 필드가 포함됩니다. 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 필드를 채웁니다. 다음 예시에서는 작업이 성공했음을 나타내기 위해 값이 0인 raResultCode 필드를 지정합니다.
{
"version": "1.0",
"jti": "965492b2-74e5-409a-90f4-f041902db05f",
"raResultString": "",
"iat": 1756408212,
"iss": "doubleclick.net",
"raResultCode": 0,
"rqJWT": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkVodWR1USJ9.eyJvcHRpb25hbFBhcmFtZXRlcnMiOiJ7XCJnYW1OZXR3b3JrQ29kZVwiOlwiMzExMDU3XCJ9Iiwic3ViIjoie1xuICAgIFwiaWRlbnRpZmllclZhbHVlXCI6IFwiY3J2QnRMakxxTlVpYWZ3WFppeXVrTEQ0VGY2bU1VWWhCZFFhUFowcGp5ZFwiLFxuICAgIFwiaWRlbnRpZmllclR5cGVcIjogXCJwcGlkXCIsXG4gICAgXCJpZGVudGlmaWVyRm9ybWF0XCI6IFwicGxhaW50ZXh0XCJcbiAgfSIsImlhdCI6MTc1NjI1Nzk1MSwidmVyc2lvbiI6IjEuMCIsImlzcyI6InRlc3RfcHVibGlzaGVyIiwiaWRKV1QiOiJleUpoYkdjaU9pSkZVekkxTmlJc0ltdHBaQ0k2SWtWb2RXUjFVU0lzSW5SNWNDSTZJa3BYVkNKOS5leUpwYzNNaU9pSjBaWE4wWDNCMVlteHBjMmhsY2lJc0luTjFZaUk2SW50Y2JpQWdJQ0JjSW1sa1pXNTBhV1pwWlhKV1lXeDFaVndpT2lCY0ltTnlka0owVEdwTWNVNVZhV0ZtZDFoYWFYbDFhMHhFTkZSbU5tMU5WVmxvUW1SUllWQmFNSEJxZVdSY0lpeGNiaUFnSUNCY0ltbGtaVzUwYVdacFpYSlVlWEJsWENJNklGd2ljSEJwWkZ3aUxGeHVJQ0FnSUZ3aWFXUmxiblJwWm1sbGNrWnZjbTFoZEZ3aU9pQmNJbkJzWVdsdWRHVjRkRndpWEc0Z0lIMGlMQ0pwWVhRaU9qRTNOVFl5TlRjNU5URXNJblpsY25OcGIyNGlPaUl4TGpBaWZRLkRoMTdmdjFzeEtNbmtPYTdIT1dmVmRzSVlvOEJCeTJwOVNrRFRTZlpvVzZ5cE1kbF81d0RZdFVJWUVmdVgzbjZVYndNb0gwV1ZnR1FuRlFyYU1INlhRIn0.zZnuUsUDzkARg31RzkhLOJCSXD5jPca8qff5IqyYrrRITgRgm29T__6gC3oOOK5RAcd_AFFYWzE8onx6Kj1w8A"
}