Flussonic

"Не работает securetoken"

Настроил все по инструкции, как описано в документации:
https://erlyvideo.ru/doc/auth/securelink

Но embed.html показывает 403 ошибку. Как отладить? В чем может быть проблема?

Есть два ключевых момента:

  1. на обоих серверах должно быть выставлено точное время
  2. флюссоник и сайт должны правильно определять IP-адрес клиента

Поясню. Токены имеют срок жизни, если на сервере время неправильное, то токены все равно будут “просрочены”. Убедитесь, что ntpd запущен на всех серверах.

Оба сервера должны видеть “внешний” адрес клиента, т.к. механизм securetoken отслеживает IP-адрес для защиты от “расшаривания” видео. При проверке токена сверяются адреса и из-за несовпадения выдает 403 ошибка.

Примеры:

  1. сайт хостится в датацентре и видит ваш внешний адрес (например, 1.2.3.4), а сервер с флюссоником находится в вашей корпоративной сети и видит ваш локальный адрес (например, 192.168.0.100).
  2. перед сайтом установлен обратный прокси-сервер (например, nginx кеш перед apache/php сайтом), из-за неправильной настройки заголовков X-Real-IP ваш сайт не видит адреса клиентов.

Это две основные причины.

1 Like

Спасибо за ответ, но время на серверах правильное, а IP-адреса определяются верно (я вывел на сайт переменную $ipaddr), а в логе флюссоника (flussonic.log) видно тот же адрес, что и на сайте.

Дважды перепроверил - все правильно настроил, но, увы, не завелось.

Остается только выставить уровень логирования в debug (это делается через админку Flussonic) и внимательно смотреть в логи. Покажете тут flussonic.log в момент открытия страницы защищенной с помощью securetoken?

Вот что получилось:

2018-07-24 14:09:45.182 <0.20421.629> [camera-office] flu_session:283 Backend auth request "/etc/flussonic/securetoken.lua" ([{token,<<"t511bf16d223651bf2167e8b5894ead587782543-9ac982dcc106877b8617a9b90a4704bb-1532445026-1532441426">>},
 {name,<<"camera-office">>},
 {ip,<<"223.42.69.162">>},
 {type,<<"jpeg">>}],#{key => <<"z76532b0wwegb">>},[{request_type,new_session},
 {duration,0},
 {stream_clients,0},
 {total_clients,198},
 {session_id,<<"5518a43d374dd6f603d53a76707f74202e89fdc3">>},
 {country,<<"RU">>},
 {user_name,<<"camera-office">>},
 {port,8080},
 {qs,<<"&token=t511bf16d223651bf2167e8b5894ead587782543-9ac982dcc106877b8617a9b9"...>>},
 {host,<<"100.165.49.38:8080">>},
 {user_agent,<<"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)">>},
 {media_request,<<"live_stream-preview_jpeg">>}]): Code: false, time, 6ms

В токене время старта 1532441426 (Jul 2018 14:10:26 +0000), а по времени сервера, клиент начинает просмотр в 14:09:45.182, получается несостыковка примерно на 25 секунд. Это важно.

Получается, клиент начинает пытается использовать токен, срок жизни которого в будущем. Вы можете подтвердить это, просто подождав 30 секунд после загрузки страницы с видео - проигрывание заработает.

Как поправить? Синхронизировать время.
На самом деле, поддержка времени секунду-в-секунду может быть не очень простой задачей, поэтому можно внести в код сайта изменение, которое вносит специально “смещение” во времени (из текущего времени вычесть 5 минут, тогда время сможет разбегаться без ущерба для просмотра.

Для вас я написал более подробную статью по работе securetoken и дополнил ее примерами на двух языках (PHP, Ruby), учитывающими рассинхронизацию времени:
https://erlyvideo.ru/doc/auth/securelink-alt

2 Likes

Заработало! Спасибо за помощь, подобная информация должна быть на сайте в документации, а не прятаться на форуме.

1 Like