Внешняя авторизация
В данном случае авторизация запросов к потокам происходит за пределами сети CDN, например, с помощью скрипта авторизации на стороне владельца контента.
Для доступа к защищённым потокам владелец контента формирует ссылки с указанием авторизационных параметров после знака ‘?’, ниже пример для RTMP:
rtmp://flash.probro.ru/live?auth_id=13211 Stream name: stream.sdp
Какие именно авторизационные параметры использовать, остаётся на усмотрение владельца контента.
При каждом обращении пользователя к защищённому потоку сервер CDN отправляет HTTP-запрос HEAD к скрипту авторизации на стороне владельца контента.
В заголовках запроса передаются следующие параметры:
- x-cdn-method : тип запрошенного потока;
- x-cdn-stream-name : имя запрошенного потока;
- x-cdn-client-ip : IP-адрес пользователя;
- x-cdn-query : авторизационные параметры запроса; в случае HTTP это queryString, в случае RTMP – аргументы NetConnect, указанные после знака ‘?’;
- x-cdn-uri : URI потока;
- x-cdn-referrer : URL Flash-плеера (только для Flash);
- x-cdn-user-agent : название и версия плеера пользователя;
- x-cdn-page-url : URL страницы, содержащей код Flash-плеера (только для Flash);
- x-cdn-session-id : идентификатор сессии;
- x-cdn-event : событие.
Возможные значения заголовка x-cdn-method:
- flash : Adobe Flash Player (RTMP);
- http : HTTP-протоколы (HDS, HLS, MSS).
Возможные значения заголовка x-cdn-event:
- play : запрос на проигрывание потока;
- publish : запрос на публикацию потока.
Для URI, приведенного в качестве примера, будут сформированы следующие заголовки:
x-cdn-method: flash
x-cdn-stream-name: stream.sdp
x-cdn-client-ip: 212.2.21.117
x-cdn-query: auth_id=13211
x-cdn-uri: rtmp://flash.probro.ru/live
x-cdn-referrer: http://www.probro.net/aloha/wowza-examples/LiveVideoStreaming/client/live.swf
x-cdn-user-agent: MAC 10,1,85,3
x-cdn-page-url: http://www.probro.net/aloha/wowza-examples/LiveVideoStreaming/client/live.html
x-cdn-session-id: 921547595
x-cdn-event: play
В ответ сервер CDNvideo ожидает HTTP response со статусом ‘200 OK’, содержащий следующие заголовки:
- x-cdn-status-int : результат авторизации;
- x-cdn-status-text : текстовое описание ответа;
- x-cdn-msg : текст для передачи ошибки в плеер (RTMP).
Возможные значения заголовка x-cdn-status-int:
- 0 : доступ разрешен;
- 1 : доступ запрещен.
Пример разрешающего ответа:
x-cdn-status-int: 0
x-cdn-status-text: OK
Пример запрещающего ответа:
x-cdn-status-int: 1
x-cdn-status-text: Access forbidden, auth_id not exist.
Для настройки такой схемы необходимо предоставить URL внешнего скрипта авторизации.
Авторизация в сети CDN
В данном случае авторизация запросов пользователей выполняется исключительно в сети CDN, внешние ресурсы не используются.
В момент обращения пользователя к защищённому потоку владельцу контента необходимо сформировать ссылку вида:
rtmp://customer.probro.ru/app_name/stream_name.sdp?md5=5Zx3SyB0XXwvE8M5BatM5Q&e=1382358959
Ссылка содержит два авторизационных параметра:
- хэш MD5, сгенерированный на основе URI, времени жизни ссылки, секретного ключа, IP-адреса пользователя (опционально);
- e – время окончания действия ссылки (в формате POSIX time).
При обращении к потоку с использованием сгенерированной ссылки, CDN вычисляет значение MD5 и сравнивает его с полученным. Если значение не совпадает или текущее время превышает значение “e”, то пользователю сразу возвращается HTTP-ответ с кодом ‘403 Forbidden’ (запрет на воспроизведение).
Алгоритм расчета MD5-хэша может использовать IP-адрес пользователя в качестве одного из входных параметров. Пример вычисления MD5-хэша с использованием IP-адреса:
md5 = base64_url(md5(SECRET:1382106248:1.2.3.4:/app_name/stream_name.sdp))
Пример генерации ссылки
- Время жизни:
php -r 'print time() + (7 * 24 * 60 * 60) . "\n";' 1382358959
- md5 хэш:
php -r 'print str_replace("=", "",strtr(base64_en-code(md5("zah5Mey9Quu8Ea1k:1382358959:1.2.3.4:/app_name/stream_name.sdp", TRUE)), "+/", "-_")) . "\n";' 5Zx3SyB0XXwvE8M5BatM5Q
- Итоговая ссылка:
rtmp://customer.probro.ru/app_name/stream_name.sdp?md5=5Zx3SyB0XXwvE8M5BatM5Q&e=1382358959
Таким образом, контролируются следующие параметры:
- URI запрашиваемого потока. Проверяется, что ссылка была сформирована именно для этого потока.
- Секретный ключ. Проверяется, что ссылка сформирована именно владельцем кон-тента.
- Время окончания действия ссылки.
- IP-адрес пользователя (опционально). Проверяется, что поток запрошен именно с того IP-адреса, для которого была сформирована ссылка.
Кроме того, могут быть проверены и другие параметры запроса пользователя:
- Географическая принадлежность пользователя (на основе IP-адреса), с детализацией до уровня города.
- URL страницы, содержащей код Flash-плеера (только для Flash). Позволяет контролировать, на каких доменах может быть размещён код плеера.
Для настройки необходимо предоставить следующую информацию:
- секретный ключ;
- алгоритм расчёта MD5 (с использованием IP-адреса пользователя или без);
- по каким параметрам проводить авторизацию (GeoIP, привязка к доменам).