Authentifier les demandes de segments de série d'annonces

Pour l'assemblage d'annonces côté serveur, votre outil de manipulation du fichier manifeste envoie des demandes de segments de séries d'annonces à l'insertion dynamique d'annonces Google. Pour en savoir plus, consultez Créer des URL de segments d'annonces.

Cette page explique comment authentifier les demandes de segments de séries d'annonces à l'aide du jeton HMAC.

Avant de commencer

Avant de continuer, procédez comme suit :

  • Remplissez les conditions préalables.
  • Assurez-vous que les clés d'authentification des ressources de pod sont activées dans votre événement de diffusion en direct de votre compte Google Ad Manager.

Générer un jeton HMAC

Pour générer un jeton, procédez comme suit :

  1. Collectez les paramètres de chemin d'accès et les paramètres de requête (sauf le jeton d'authentification) renseignés pour votre demande de segment de pod. Pour obtenir la liste complète, consultez Méthode : segment de pod.
  2. Organisez vos paramètres dans une seule chaîne. Vous devez trier les paramètres par ordre alphabétique et les séparer par le caractère tilde ~, par exemple :

    custom_asset_key=CUSTOM_ASSET_KEY~exp=EXPIRATION~network_code=NETWORK_CODE~pd=POD_DURATION~pod_id=POD_IDENTIFIER
    
  3. Calculez un hachage SHA-256 de la chaîne de jeton à l'aide de votre clé d'authentification DAI.

  4. Mettez en forme le hachage au format hexadécimal.

  5. Pour signer la chaîne de jetons, ajoutez la signature à la fin des paramètres collectés précédemment :

    custom_asset_key=...~hmac=HMAC_SIGNATURE
    

    Remplacez HMAC_SIGNATURE par la signature que vous avez générée en hachant la chaîne de jeton à l'aide de votre clé d'authentification DAI.

  6. Pour transmettre la chaîne de jeton signée de manière sécurisée, appliquez l'encodage URL à la chaîne de jeton signée.

    L'exemple suivant génère la valeur encodée au format URL d'une chaîne de jeton signée :

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

Authentifier une demande de segment de série d'annonces HLS

Pour authentifier vos requêtes de ressources de pod, utilisez le paramètre de chaîne de requête auth-token pour transmettre le jeton HMAC signé encodé au format URL.

HLS

L'exemple suivant utilise un jeton HMAC pour authentifier une requête de segment de pod 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 l'opération réussit, la réponse suivante s'affiche :

...
< 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
...

Pour comprendre la structure de la réponse et les codes d'état, consultez Méthode : segment de pod.

Si l'authentification échoue, le message x-ad-manager-dai-warning s'affiche :

...
< 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

L'exemple suivant utilise un jeton HMAC pour authentifier une requête de segment de pod 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 l'opération réussit, la réponse suivante s'affiche :

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

Pour comprendre la structure de la réponse et les codes d'état, consultez Méthode : segment de pod.

Si l'authentification échoue, le message x-ad-manager-dai-warning s'affiche comme suit :

...
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
...