Authentifier les demandes de session de flux

Une requête de flux enregistre une session pour un événement en direct. Pour en savoir plus, consultez la section Effectuer une requête de flux.

Cette page explique comment utiliser un jeton HMAC pour authentifier les requêtes de flux.

Avant de commencer

Avant de continuer, procédez comme suit :

  • Remplissez les conditions préalables.
  • Dans votre compte Google Ad Manager, activez les clés d'authentification de création de flux pour votre événement en direct. Si vous utilisez l'authentification par jeton, la clé est obligatoire.

Générer un jeton HMAC

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

  1. Récupérez la clé de l'élément et le délai d'expiration de votre diffusion en direct. Pour en savoir plus, consultez la section Activer l'authentification pour les requêtes de création de sessions de flux DAI
  2. Triez les paramètres suivants par ordre alphabétique et séparez-les par le caractère tilde ~ :

    event=ASSET_KEY~exp=EXPIRATION
    

    Remplacez les éléments suivants :

    • ASSET_KEY : obligatoire. Clé de l'élément de l'événement en direct.
    • EXPIRATION : obligatoire. Timestamp d'expiration du jeton au format Unix epoch.
  3. Calculez un hachage SHA-256 de la chaîne de jeton à l'aide de votre clé d'authentification DAI.

  4. Mettez en forme la sortie de hachage au format hexadécimal.

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

    event=...~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 en toute sécurité, appliquez un encodage d'URL à la chaîne de jeton signée.

L'exemple suivant signe et encode une chaîne de jeton qui expire dans 60 secondes :

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

echo "Current: $EPOCHSECONDS"
echo "Future: $future_epoch"
# Current: 1767389133
# Future: 1767389193

# Sample DAI stream authentication key
key="DE0E9..."

# Sort parameters in the token string
token="event=YRB0Bl0oQRCb5J-maPpJUQ~exp=1767389193"

# Generate the token's signature.
echo -n $token | openssl dgst -sha256 -mac HMAC -macopt key:$key
# SHA2-256(stdin)= 9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248

# Sign the token: event=YRB0Bl0oQRCb5J-maPpJUQ~exp=1767389193~hmac=9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248

# Encode the token: event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248

Utiliser le jeton HMAC pour demander une session de diffusion en direct

Pour authentifier votre requête de création de flux avec un jeton HMAC, procédez de l'une des manières suivantes :

En-tête de requête Authorization

  curl "https://dai.google.com/linear/v1/hls/event/YRB0Bl0oQRCb5J-maPpJUQ/stream" \
  -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: DCLKDAI token=event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248"

Paramètre de chaîne de requête

  curl "https://dai.google.com/linear/v1/hls/event/YRB0Bl0oQRCb5J-maPpJUQ/stream?auth-token=event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248" \
  -X POST \
  -H "Content-Type: application/x-www-form-urlencoded"

Champ de données de formulaire

  curl "https://dai.google.com/linear/v1/hls/event/YRB0Bl0oQRCb5J-maPpJUQ/stream" \
  -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "auth-token=event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248"

Si l'opération réussit, la réponse JSON suivante s'affiche :

  {
  "hls_master_playlist": "https://dai.google.com/linear/hls/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/master.m3u8",
  "media_verification_url": "https://dai.google.com/view/p/service/linear/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/loc/DLS/network/21775744923/event/YRB0Bl0oQRCb5J-maPpJUQ/media/",
  "metadata_url": "https://dai.google.com/linear/v1/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/metadata",
  "polling_frequency": 10,
  "session_update_url": "https://dai.google.com/linear/v1/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/session",
  "stream_id": "e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS",
  "stream_manifest": "https://dai.google.com/linear/hls/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/master.m3u8"
  }

Pour comprendre la structure de la réponse et les codes d'état, consultez la section Méthode : flux. Si l'authentification échoue, l'erreur suivante s'affiche :

  <!DOCTYPE html>
  <html lang=en>
    <meta charset=utf-8>
    <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
    <title>Error 401 (Unauthorized)!!1</title>
    ...
    <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
    <p><b>401.</b> <ins>That’s an error.</ins>
    <p><ins>That’s all we know.</ins>