Autenticare le richieste di sessione di streaming

Una richiesta di stream registra una sessione per un evento in live streaming. Per maggiori dettagli, vedi Effettuare una richiesta di stream

Questa pagina spiega come utilizzare il token HMAC per autenticare le richieste di stream.

Prima di iniziare

Prima di continuare, completa queste operazioni:

  • Completa i prerequisiti.
  • Nel tuo account Google Ad Manager, attiva Chiavi di autenticazione per la creazione di stream per l'evento in live streaming. Se utilizzi l'autenticazione tramite token, la chiave è obbligatoria.

Generare un token HMAC

Per generare un token:

  1. Raccogli la chiave asset e l'ora di scadenza del live streaming. Per saperne di più, consulta Attivare l'autenticazione per le richieste di creazione di sessioni di stream DAI
  2. Ordina i seguenti parametri in ordine alfabetico e separali con il carattere tilde ~:

    event=ASSET_KEY~exp=EXPIRATION
    

    Sostituisci quanto segue:

    • ASSET_KEY: obbligatorio. La chiave asset dell'evento in live streaming.
    • EXPIRATION: obbligatorio. Il timestamp di scadenza del token in formato Unix epoch.
  3. Calcola un hash SHA-256 della stringa del token utilizzando la chiave di autenticazione DAI.

  4. Formatta l'output dell'hash in formato esadecimale.

  5. Per firmare la stringa del token, aggiungi la firma alla fine dei parametri raccolti in precedenza:

    event=...~hmac=HMAC_SIGNATURE
    

    Sostituisci HMAC_SIGNATURE con la firma che hai generato eseguendo l'hashing della stringa del token utilizzando la chiave di autenticazione DAI.

  6. Per trasmettere in modo sicuro la stringa del token firmata, applica la codifica URL alla stringa del token firmata.

L'esempio seguente firma e codifica una stringa del token che scade entro 60 secondi:

# 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

Utilizzare il token HMAC per richiedere una sessione di live streaming

Per autenticare la richiesta di creazione di stream con un token HMAC, procedi in uno dei seguenti modi:

Intestazione della richiesta 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"

Parametro stringa di query

  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"

Campo dati modulo

  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"

Se l'operazione ha esito positivo, viene visualizzata la seguente risposta JSON:

  {
  "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"
  }

Per comprendere la struttura della risposta e i codici di stato, consulta Metodo: stream. Se l'autenticazione non riesce, viene visualizzato il seguente errore:

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