Autentica solicitudes de segmentos de grupos de anuncios

Para la unión de anuncios del servidor, el manipulador de manifiestos realiza solicitudes de segmentos de grupos de anuncios a la DAI de Google. Para obtener más información, consulta Cómo compilar URLs de segmentos de anuncios.

En esta página, se explica cómo autenticar solicitudes de segmentos de grupos de anuncios con el token HMAC.

Antes de comenzar

Antes de continuar, haz lo siguiente:

  • Completa los requisitos.
  • Asegúrate de que las claves de autenticación de recursos de Pod estén habilitadas en tu evento de transmisión en vivo en tu cuenta de Google Ad Manager.

Genera un token HMAC

Para generar un token, haz lo siguiente:

  1. Recopila la ruta de acceso y los parámetros de consulta (excepto el token de autenticación) que se propagaron para tu solicitud de segmento de grupo de anuncios. Para obtener una lista completa, consulta Método: segmento de grupo de anuncios.
  2. Organiza tus parámetros en una sola cadena. Debes ordenar los parámetros alfabéticamente y separarlos con el carácter de tilde ~, por ejemplo:

    custom_asset_key=CUSTOM_ASSET_KEY~exp=EXPIRATION~network_code=NETWORK_CODE~pd=POD_DURATION~pod_id=POD_IDENTIFIER
    
  3. Calcula un hash SHA-256 de la cadena de token con tu clave de autenticación de DAI.

  4. Da formato a la salida del hash en hexadecimal.

  5. Para firmar la cadena de token, agrega la firma al final de los parámetros recopilados anteriormente:

    custom_asset_key=...~hmac=HMAC_SIGNATURE
    

    Reemplaza HMAC_SIGNATURE por la firma que generaste mediante el hash de la cadena de token con tu clave de autenticación de DAI.

  6. Para pasar la cadena de token firmada de forma segura, aplica la codificación de URL a la cadena de token firmada.

    En el siguiente ejemplo, se genera el valor codificado de URL de una cadena de token firmada:

HLS

# Add 60 seconds to the current time
future_epoch=$((EPOCHSECONDS + 60))

echo "Current: $EPOCHSECONDS"
echo "Future: $future_epoch"
# Current: 1774465950
# Future: 1774466010

# Sample DAI pod resource authentication key
key="EB08..."

# Sort parameters in the token string
token="ad_break_id=ab1~custom_asset_key=hls-pod-serving-redirect-auth-stream-pod~exp=1774466010~network_code=21775744923~pd=30000"

# Generate the token's signature.
echo -n $token | openssl dgst -sha256 -mac HMAC -macopt key:$key

# SHA2-256(stdin)= ff38abab31b436351e20ecd57bcc5b97acd9461abb71c4cf9c9731add965ecf2

# Sign the token: ad_break_id=ab1~custom_asset_key=hls-pod-serving-redirect-auth-stream-pod~exp=1774466010~network_code=21775744923~pd=30000~hmac=ff38abab31b436351e20ecd57bcc5b97acd9461abb71c4cf9c9731add965ecf2

# Encode the token: ad_break_id%3Dab1~custom_asset_key%3Dhls-pod-serving-redirect-auth-stream-pod~exp%3D1774466010~network_code%3D21775744923~pd%3D30000~hmac%3Dff38abab31b436351e20ecd57bcc5b97acd9461abb71c4cf9c9731add965ecf2

DASH

# Add 60 seconds to the current time
future_epoch=$((EPOCHSECONDS + 60))

echo "Current: $EPOCHSECONDS"
echo "Future: $future_epoch"
# Current: 1769540517
# Future: 1769540577

# Sample DAI pod resource authentication key
key="EB08..."

# Sort parameters in the token string
token="ad_break_id=ab1~custom_asset_key=dash-pod-serving-redirect-auth-stream-pod~exp=1774466641~network_code=21775744923~pd=30000"

# Generate the token's signature.
echo -n $token | openssl dgst -sha256 -mac HMAC -macopt key:$key

# SHA2-256(stdin)= 7249f9193778f2318314519ff2cea5c47958bc7fdd2eaf24008352867af0a050

# Sign the token: ad_break_id=ab1~custom_asset_key=dash-pod-serving-redirect-auth-stream-pod~exp=1774466641~network_code=21775744923~pd=30000~hmac=7249f9193778f2318314519ff2cea5c47958bc7fdd2eaf24008352867af0a050

# Encode the token: ad_break_id%3Dab1~custom_asset_key%3Ddash-pod-serving-redirect-auth-stream-pod~exp%3D1774466641~network_code%3D21775744923~pd%3D30000~hmac%3D7249f9193778f2318314519ff2cea5c47958bc7fdd2eaf24008352867af0a050

Autentica una solicitud de segmento de grupo de anuncios de HLS

Para autenticar tus solicitudes de recursos de grupo de anuncios, usa el parámetro de cadena de consulta auth-token para pasar el token HMAC firmado y codificado en URL.

HLS

En el siguiente ejemplo, se usa un token HMAC para autenticar una solicitud de segmento de grupo de anuncios de HLS:

curl --include "https://dai.google.com/linear/pods/v1/seg/network/21775744923/custom_asset/hls-pod-serving-redirect-auth-stream-pod/ad_break_id/ab1/profile/media-ts-4628000bps/0.ts?stream_id=51b85d28-7ed5-48da-bfd8-e013b7d7b204:DLS&&sd=10000&pd=30000&auth-token=ad_break_id%3Dab1~custom_asset_key%3Dhls-pod-serving-redirect-auth-stream-pod~exp%3D1774466010~network_code%3D21775744923~pd%3D30000~hmac%3Dff38abab31b436351e20ecd57bcc5b97acd9461abb71c4cf9c9731add965ecf2"

Si la operación se realiza correctamente, verás la siguiente respuesta:

...
< HTTP/2 302
< access-control-allow-headers: Authorization
< access-control-allow-origin: *
< access-control-expose-headers: Location
< cache-control: no-cache, no-store, max-age=0, must-revalidate
< date: Wed, 25 Mar 2026 18:13:40 GMT
< expires: Mon, 01 Jan 1990 00:00:00 GMT
< location: https://redirector.googlevideo.com/....
< pragma: no-cache
< x-content-type-options: nosniff
< x-frame-options: SAMEORIGIN
...

Para comprender la estructura de la respuesta y los códigos de estado, consulta Método: segmento de grupo de anuncios.

Si falla la autenticación, verás x-ad-manager-dai-warning:

...
< HTTP/2 302
< access-control-allow-headers: Authorization
< access-control-allow-origin: *
< access-control-expose-headers: Location
< cache-control: no-cache, no-store, max-age=0, must-revalidate
< date: Wed, 25 Mar 2026 18:17:21 GMT
< expires: Mon, 01 Jan 1990 00:00:00 GMT
< location: https://redirector.googlevideo.com/....
< pragma: no-cache
< x-ad-manager-dai-warning: Unable to create ad break due to Unauthorized error (skipping ad break creation)
< x-content-type-options: nosniff
...

DASH

En el siguiente ejemplo, se usa un token HMAC para autenticar una solicitud de segmento de grupo de anuncios de DASH:

curl --include "https://dai.google.com/linear/pods/v1/seg/network/21775744923/custom_asset/dash-pod-serving-redirect-auth-stream-pod/ad_break_id/ab1/profile/media-ts-4628000bps/0.ts?stream_id=8b061ab5-1efc-4e4d-882f-ae3c071df854:ATL&&sd=10000&pd=30000&auth-token=ad_break_id%3Dab1~custom_asset_key%3Ddash-pod-serving-redirect-auth-stream-pod~exp%3D1774466641~network_code%3D21775744923~pd%3D30000~hmac%3D7249f9193778f2318314519ff2cea5c47958bc7fdd2eaf24008352867af0a050"

Si la operación se realiza correctamente, verás la siguiente respuesta:

...
HTTP/2 302
..
location: https://redirector.googlevideo.com/....
...

Para comprender la estructura de la respuesta y los códigos de estado, consulta Método: segmento de grupo de anuncios.

Si falla la autenticación, verás x-ad-manager-dai-warning de la siguiente manera:

...
HTTP/2 302
..
location: https://redirector.googlevideo.com/....
pragma: no-cache
x-ad-manager-dai-warning: Unable to create ad break due to Unauthorized error (skipping ad break creation)
x-content-type-options: nosniff
...