HTTP Auth: Securetoken
El middleware genera un token único para cada canal utilizando algoritmos criptográficos y securetoken. A cada dirección de canal, el middleware añade información sobre cuándo se concedió el acceso, el tiempo de expiración y el token para validar los datos proporcionados.
Astra utiliza los mismos algoritmos criptográficos y el mismo securetoken para verificar los datos proporcionados y conceder acceso al canal.
El token temporal es calculado por el middleware en el servidor cuando el cliente solicita la playlist. El token contiene las siguientes partes:
- Hash - hash calculado en el servidor con el algoritmo SHA1
- Salt - palabra aleatoria para mayor seguridad
- Hora de finalización - tiempo de expiración del token en formato unix-timestamp
- Hora de inicio - tiempo de creación del token en formato unix-timestamp
Todas las partes deben estar separadas por un guion y añadidas a la dirección del canal. Por ejemplo: https://example.com:8100/tv/travel-channel/index.m3u8?token=e8bff06f373694dda657e8417fe76f6b54b69807-a5cd6c00-1669890000-1669810000
El hash debe ser calculado en el middleware con el algoritmo SHA1 a partir de una cadena concatenada con las siguientes partes:
- Channel ID - identificador único del canal desde la configuración de Astra
- Dirección IP del cliente
- Hora de inicio - unix-timestamp como número decimal
- Hora de finalización - unix-timestamp como número decimal
- Securetoken - definido en la configuración de Astra
- Salt - palabra aleatoria para mayor seguridad
Ejemplo en PHP
Sección titulada «Ejemplo en PHP»Crea un archivo securetoken.php con el siguiente código:
<?php
$channel_path = '/tv/travel-channel/index.m3u8';$channel_id = 'travel-channel';$client_ip = '192.168.88.98';$starttime = time() - 60;$endtime = $starttime + 3600;$securetoken = 'secret';$salt = bin2hex(random_bytes(4));$hash = sha1($channel_id . $client_ip . $starttime . $endtime . $securetoken . $salt);$token = $hash . '-' . $salt . '-' . $endtime . '-' . $starttime;
echo 'https://example.com:8100' . $channel_path . '?token=' . $token . PHP_EOL;Ejecuta el script:
php securetoken.phpVerás una línea como en el primer ejemplo. Por favor, ten en cuenta que este script es solo un ejemplo.