Перейти к содержимому

HTTP Auth: Securetoken

Промежуточное ПО генерирует уникальный токен для каждого канала с помощью криптографических алгоритмов и securetoken. К каждому адресу канала Middleware добавляет информацию о времени предоставления доступа, времени истечения срока действия и токене для проверки предоставленных данных.

Astra использует те же криптографические алгоритмы и тот же securetoken для проверки предоставленных данных и предоставления доступа к каналу.

Временный токен вычисляется на стороне сервера промежуточным ПО, когда клиент запрашивает плейлист. Токен содержит следующие части:

  1. Хэш — хэш, вычисленный на сервере с помощью алгоритма SHA1
  2. Соль — случайное слово для повышения безопасности
  3. Время окончания — время истечения срока действия токена в формате unix-timestamp
  4. Время начала — время создания токена в формате 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
  • Соль — случайное слово для повышения безопасности

Создайте файл 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

Вы увидите строку из первого примера. Обратите внимание, этот скрипт приведён только для примера.