Une demande de diffusion en direct enregistre une session pour un événement en direct. Pour en savoir plus, consultez Envoyer 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 pour la 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 :
- Récupérez la clé de l'élément et l'heure d'expiration de votre diffusion en direct. Pour en savoir plus, consultez Activer l'authentification pour les requêtes de création de sessions de flux DAI.
Triez les paramètres suivants par ordre alphabétique et séparez-les à l'aide du caractère tilde
~:event=ASSET_KEY~exp=EXPIRATIONRemplacez les éléments suivants :
ASSET_KEY: obligatoire. Clé de l'élément de l'événement de diffusion en direct.EXPIRATION: obligatoire. Code temporel d'expiration du jeton en heure epoch Unix.
Calculez un hachage SHA-256 de la chaîne de jeton à l'aide de votre clé d'authentification DAI.
Mettez en forme le hachage au format hexadécimal.
Pour signer la chaîne de jetons, ajoutez la signature à la fin des paramètres collectés précédemment :
event=...~hmac=HMAC_SIGNATURERemplacez
HMAC_SIGNATUREpar la signature que vous avez générée en hachant la chaîne de jeton à l'aide de votre clé d'authentification DAI.Pour transmettre la chaîne de jeton signée de manière sécurisée, appliquez l'encodage d'URL à la chaîne de jeton signée.
L'exemple suivant signe et code une chaîne de jeton qui expire dans les 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 :
Authorization en-tête de requête
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 du 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 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>