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

Questa pagina illustra l'utilizzo del token HMAC per autenticare le richieste di streaming.

Prima di iniziare

Prima di continuare, completa queste operazioni:

  • Completa i prerequisiti.
  • Nel tuo account Google Ad Manager, attiva Stream create authentication keys per il tuo evento di live streaming. Se utilizzi l'autenticazione con 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 streaming 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 di 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 firmato, applica la codifica URL alla stringa del token firmato.

Il seguente esempio firma e codifica una stringa di 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 dello stream con un token HMAC, esegui una delle seguenti operazioni:

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 di dati del 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"

In caso di 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 va a buon fine, 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>