HTTP Auth: Securetoken
Промежуточное ПО генерирует уникальный токен для каждого канала с помощью криптографических алгоритмов и securetoken. К каждому адресу канала Middleware добавляет информацию о времени предоставления доступа, времени истечения срока действия и токене для проверки предоставленных данных.
Astra использует те же криптографические алгоритмы и тот же securetoken для проверки предоставленных данных и предоставления доступа к каналу.
Временный токен вычисляется на стороне сервера промежуточным ПО, когда клиент запрашивает плейлист. Токен содержит следующие части:
- Хэш — хэш, вычисленный на сервере с помощью алгоритма SHA1
- Соль — случайное слово для повышения безопасности
- Время окончания — время истечения срока действия токена в формате unix-timestamp
- Время начала — время создания токена в формате unix-timestamp
Все части должны быть разделены знаком минус и добавлены к адресу канала. Например: https://example.com:8100/tv/travel-channel/index.m3u8?token=e8bff06f373694dda657e8417fe76f6b54b69807-a5cd6c00-1669890000-1669810000
Хэш должен вычисляться на промежуточном ПО с помощью алгоритма SHA1 из строки, собранной из следующих частей:
- Channel ID — уникальный идентификатор канала из настроек Astra
- IP-адрес клиента
- Время начала — unix-timestamp в виде десятичного числа
- Время окончания — unix-timestamp в виде десятичного числа
- Securetoke — задан в настройках Astra
- Соль — случайное слово для повышения безопасности
Пример на PHP
Заголовок раздела «Пример на PHP»Создайте файл securetoken.php со следующим кодом:
<?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;Запустите скрипт:
php securetoken.phpВы увидите строку из первого примера. Обратите внимание, этот скрипт приведён только для примера.