Secure token. Настроить и использовать

Последние изменения: 16.02.2023

Настройка опции
Скрипты для генерации защищённых ссылок
        • PHP
        • Python
        • OpenSSL  

Настройка опции

Первые три шага выполняйте в личном кабинете в разделе Secure token.

2448a18b1ee651d7d3ef042fdf6d30e5.png

1. Включите опцию Secure token в настройках ресурса.

2. В поле «Ключ» введите любой набор символов длиной от 6 до 32 символов.

3. Если контент должен быть доступен с любых IP-адресов, оставьте пустым чекбокс «Добавить IP-адрес к токену». Если хотите, чтобы контент был доступен только с одного IP, поставьте в чекбоксе галочку (доверенный IP вы укажете позже, на шаге №4).

4. Эту настройку выполните на сервере-источнике. Добавьте на свой источник скрипт, который генерирует защищённые ссылки на контент. Получившиеся ссылки должны иметь вид:

60a2f60acec9d066eae034a4e425e2f5.png

В этой ссылке:

  • http://cdn.example.com/photo.jpeg — путь к файлу

  • DMF1ucDxtHCxwYQ — результат хэш-функции MD5(String), где String — параметр, полученный слиянием элементов: <время истечения ссылки><путь к файлу><доверенный IP> <ключ, который вы указали на шаге №2>

  • 2147483647 — момент времени, после которого ссылка будет считаться недействительной, в формате UNIX timestamp

Мы подготовили для вас шаблоны скриптов для PHP, Python и OpenSSL — просто скопируйте один из них из раздела «Скрипты для генерации ссылок». Скрипт начнёт создавать защищённые ссылки на контент.

5. Эту настройку выполните на сервере-источнике. Организуйте свой источник таким образом, чтобы доступ к нужным файлам пользователи получали только по ссылкам с secure token. При этом наша CDN при обращении к серверу-источнику должна получать контент вне зависимости от наличия ключа.

На этом настройка закончена, опция Secure token работает и защищает ваш контент.

Скрипты для генерации ссылок

Генерировать ссылки с secure token на PHP

Скрипт для создания временных ссылок с ограничением доступа по IP. Файлы будут доступны только с доверенного IP, и только пока не истечёт срок жизни ссылки.

<?php
$secret = 'secret_key';
$ip = '1.2.3.4';
$path = '/live/133529_2/chunklist.m3u8';
$expires = time() + 10000;
$link = "$expires$path$ip $secret";
$md5 = md5($link, true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url = "http://cdn.site.com{$path}?md5={$md5}&expires={$expires}";
 echo $url;
 echo "\n";

Скрипт для создания временных ссылок без ограничения доступа по IP. Файлы будут доступны с любого IP, но только пока не истечёт срок жизни ссылки.

<?php
$secret = 'secret_key';
$path = '/live/133529_2/chunklist.m3u8';
$expires = time() + 10000;
$link = "$expires$path $secret";
$md5 = md5($link, true);
$md5 = base64_encode($md5);
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
$url = "http://cdn.site.com{$path}?md5={$md5}&expires={$expires}";
 echo $url;
 echo "\n"

В этих скриптах:

  • $secret — секретный ключ

  • $path — путь к файлу

  • $ip — IP-адрес, которому разрешено получить контент

  • $expires — момент времени, после которого ссылка будет считаться недействительной, в формате UNIX timestamp

  • $url — итоговая ссылка на файл

Генерировать ссылки с secure token на Python

Скрипт для создания временных ссылок с ограничением доступа по IP. Файлы будут доступны только с доверенного IP и только пока не истечёт срок жизни ссылки.

import base64 
from hashlib import md 
from time import time 
ip = '1.2.3.4' 
secret = 'secret_key' 
stream_address = '133529_2' 
path = f'/live/{stream_address}/playlist.m3u8' 
expires = int(time()) + 100000 
token = base64.encodebytes(md5(f"{expires}{path}{ip} {secret}".encode()).digest()).decode().replace("\n", "").replace("+", "-").replace("/", "_").replace("=", "") 
secured_url = f"https://cdn.site.com{path}?md5={token}&expires={expires}" 
print(secured_url)

Скрипт для создания временных ссылок без ограничения доступа по IP. Файлы будут доступны с любого IP, но только пока не истечёт срок жизни ссылки.

import base64 
from hashlib import md5 
from time import time 
secret = 'secret_key' 
stream_address = '133529_2' 
path = f'/live/{stream_address}/playlist.m3u8' 
expires = int(time()) + 100000 
token = base64.encodebytes(md5(f"{expires}{path} {secret}".encode()).digest()).decode().replace("\n", "").replace("+", "-").replace("/", "_").replace("=", "") 
secured_url = f"https://cdn.site.com{path}?md5={token}&expires={expires}" 
print(secured_url)

В этих скриптах:

  • secret — секретный ключ

  • path — путь к файлу

  • ip — IP-адрес, которому разрешено получить контент

  • expires — момент времени, после которого ссылка будет считаться недействительной, в формате UNIX timestamp

  • secured_url — итоговая ссылка на файл

Сгенерировать secure token через OpenSSL

Скрипт для создания secure token, который ограничивает время жизни ссылки и открывает доступ к контенту только доверенному IP: 
echo -n '2147483647/images/1.jpg1.2.3.4 secret_key' | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d ='2147483647/images/1.jpg1.2.3.4 secret_key' = '{expires}{path}{ip} {secret_key}'

Скрипт для создания secure token, который только ограничивает время жизни ссылки:

echo -n '2147483647/images/1.jpg secret_key' | openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d = '2147483647/images/1.jpg secret_key' = '{expires}{path} {secret_key}'

В этих скриптах:

  • 2147483647/images/1.jpg — путь к файлу

  • 1.2.3.4 — доверенный IP

  • secret_key — секретный ключ, который вы ввели на шаге №2 инструкции «Настройка опции»

Скрипты выше только генерируют secure token. Вам нужно самостоятельно создать дополнительный скрипт, который добавляет к ссылкам secure token и время истечения ссылки, а также приводит ссылку к виду:

60a2f60acec9d066eae034a4e425e2f5.png

В этой ссылке:

  • http://cdn.example.com/photo.jpeg — путь к файлу

  • DMF1ucDxtHCxwYQ — secure token

  • 2147483647 — момент времени, после которого ссылка будет считаться недействительной, в формате UNIX timestamp


Помогла ли вам статья?