Ограничение количества сессий на пользователя (защита от кражи)¶
Ограничение сессий¶
Для того, чтобы любой Ваш пользователь, получивший доступ к потокам, не устроил полное зеркалирование на свой сервер (например, с целью дальнейшей перепродажи), во Flussonic Media Server есть возможность ограничить количество одновременно просматриваемых потоков.
Таким образом, даже получив доступ ко всем потокам, пользователь сможет просматривать одновременно лишь N потоков, а попытки зеркалировать все потоки ни к чему не приведут.
Ограничение накладывается на каждого пользователя, который имеет свой UserId
и задаётся с помощью авторизации.
Детали¶
Для того чтобы ограничить количество сессий до 2, нужно в авторизационном бэкенде отдавать следующие заголовки:
X-UserId: some-user-id
X-Max-Sessions: 2
А через lua-бэкенд поля user_id
и max_sessions
соответственно.
Если после такой авторизации пользователь попытается просматривать одновременно три потока, то просмотр одного из них будет прерван.
Бан¶
После того как сессия была забанена, любые попытки переоткрыть её в течении X-AuthDuration
будут отклонены Flussonic Media Server.
Таким образом, если указать X-AuthDuration: 3600
и открыть лишний поток, то после блокировки этот поток нельзя будет открыть, используя старый токен в течении часа.
После того как сессия будет заблокирована на очередной запрос HLS-плейлиста клиент получит ответ 403 Forbidden
. В случае же с RTSP, RTMP, HTTP MPEG-TS сокет будет просто молча закрыт.
Каждая заблокированная сессия сопровождается записью в лог, например:
14:58:51.598 <0.391.0> [stream-name] session_limiter:174 Ban session_id: <<"604551981e3e787b897afbaf35bb9f4d168d70b9">> for user_id: <<"8471796306">> and token: <<"5cfb82ecaf56ebfe7ac32a9020c86ef1d231d49e">> due to exceeded session limit
Мягкое ограничивание¶
Некоторые Middleware не могут генерировать новый токен на каждый запрос HLS-потока. При переключении между потоками это может создать проблемы, так как сессии на старых потоках будут помечены как лишние и будут заблокированы.
Специально для этих случаев во Flussonic Media Server есть механизм мягкого ограничения сессий.
Иногда блокировка не происходит в первую проверку, необходимо время, чтобы понять, что все сессии действительно используются. Тогда она происходит во вторую или третью волны. Таким образом, после появления лишних сессий, они обычно блокируются через 30-90 секунд.
Для того, чтобы включить этот режим, необходимо указать параметр soft_limitation=true
к опции on_play
, например:
stream foobar {
on_play http://FLUSSONIC-IP:8081/my_auth_script.php soft_limitation=true;
}
Опцию soft_limitation
также можно установить в пользовательском интерфейсе на странице Conifg > Auth:
X-Unique: true¶
Заголовок X-Unique
считается устаревшим, вместо него предполагается использовать X-Max-Sessions
описанный выше.
X-UserId: some-id
X-Unique: true
Эквивалентно:
X-UserId: some-id
X-Max-Sessions: 1
Кроме того, если указаны и X-Max-Sessions
и X-Unique
, то приоритет отдаётся X-Max-Sessions
. Таким образом:
X-UserId: some-id
X-Max-Sessions: 5
X-Unique: true
Эквивалентно:
X-UserId: some-id
X-Max-Sessions: 5