Autentica solicitudes de sesión de transmisión

Una solicitud de transmisión registra una sesión para un evento de transmisión en vivo. Para obtener más información, consulta Realiza una solicitud de transmisión.

En esta página, se explica cómo usar el token HMAC para autenticar las solicitudes de transmisión.

Antes de comenzar

Antes de continuar, haz lo siguiente:

  • Completa los requisitos.
  • En tu cuenta de Google Ad Manager, habilita Claves de autenticación para crear transmisiones para tu evento de transmisión en vivo. Si usas la autenticación de tokens, se requiere la clave.

Genera un token HMAC

Para generar un token, haz lo siguiente:

  1. Reúne la clave del recurso y la hora de vencimiento de tu transmisión en vivo. Para obtener más información, consulta Habilita la autenticación para las solicitudes de creación de sesiones de transmisión de DAI
  2. Ordena los siguientes parámetros alfabéticamente y sepáralos con el carácter de tilde ~:

    event=ASSET_KEY~exp=EXPIRATION
    

    Reemplaza lo siguiente:

    • ASSET_KEY: Obligatorio. Es la clave del recurso del evento de transmisión en vivo.
    • EXPIRATION: Obligatorio. Es la marca de tiempo de vencimiento del token en tiempo de época de Unix.
  3. Calcula un hash SHA-256 de la cadena de token con tu clave de autenticación de DAI.

  4. Da formato a la salida del hash en hexadecimal.

  5. Para firmar la cadena de token, agrega la firma al final de los parámetros recopilados anteriormente:

    event=...~hmac=HMAC_SIGNATURE
    

    Reemplaza HMAC_SIGNATURE por la firma que generaste mediante el hash de la cadena de token con tu clave de autenticación de DAI.

  6. Para pasar la cadena de token firmada de forma segura, aplica la codificación de URL a la cadena de token firmada.

En el siguiente ejemplo, se firma y codifica una cadena de token que vence en 60 segundos:

# 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

Usa el token HMAC para solicitar una sesión de transmisión en vivo

Para autenticar tu solicitud de creación de transmisión con un token HMAC, realiza una de las siguientes acciones:

Encabezado de la solicitud 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"

Parámetro de cadena de consulta

  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 de datos del formulario

  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 se ejecuta correctamente, verás la siguiente respuesta 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"
  }

Para comprender la estructura de la respuesta y los códigos de estado, consulta Método: stream. Si falla la autenticación, verás el siguiente error:

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