Как ограничить использование приложений для SaaS с подходом, основанным на одном месте?
Я работаю над своим корпоративным SaaS-приложением, и некоторые из моих пользователей хотели бы получить плату за индивидуальный подход.
Мне было интересно, как сделать так, чтобы доступ действительно был ограничен. Сейчас я вижу, что люди с одним и тем же логином / паролем регистрируются с разных IP-адресов, с разными пользовательскими агентами одновременно, хотя компания заплатила только за одно место.
Как лучше всего реализовать ограничение с точки зрения бизнеса и техники? Я не хочу быть слишком строгим, в то же время я хочу, чтобы компании платили за количество мест, которое им действительно нужно.
2 ответа
Использование IP кажется плохой идеей - все люди в локальной сети (как правило) будут иметь один и тот же IP.
Предполагая, что у PHP нет API для доступа к сеансам проверки, отличным от текущего, - одна из идей:
- если вы этого еще не сделали, для каждого файла cookie входа в систему также введите уникальный идентификатор (UUID будет служить вашей цели)
- хранить эти идентификаторы где-нибудь (в java вы могли бы хранить их в контексте приложения, возможно, в php вам понадобится таблица db для этого - я не специалист по php) вместе с двумя временными метками: "начало сеанса" и "последнее действие" "
- при каждом запросе записывайте текущую отметку времени в "последней активности"
Затем, когда вы получите новый запрос, посчитайте, сколько других активных
last activity >= current session start
last activity >= now - session TTL
(требуется только в том случае, если не удается своевременно удалить устаревшие сессии)
Это должно дать вам количество занятых мест.
Обратите внимание, что вы не заметите нарушения количества мест до тех пор, пока излишний пользователь не войдет в систему, а точнее до тех пор, пока вы не увидите активность в каком-либо другом сеансе. место становится вакантным (ну, вы можете сказать, что оно вакантно, только когда истек срок его сессии, но это кажется несправедливым).
Не фильтруйте по пользовательскому агенту, я думаю, что это будет слишком строго, у некоторых людей могут быть установлены различные браузеры. Фильтрация по IP также может быть сложной задачей, некоторые пользователи могут иметь динамический IP, который меняется через регулярные промежутки времени.
У меня есть одна идея - заставить пользователей устанавливать расширение для браузера: расширение для браузера может генерировать уникальный идентификатор из чего-то в операционной системе. Возможно, используйте номер тома жесткого диска или серийный ключ Windows, все, что будет уникальным для этого компьютера.
Когда у вас есть этот уникальный идентификатор, используйте его в бэкэнд-трекинге каждый раз, когда пользователь входит в систему. Если пользователь превышает определенное количество мест, вы можете либо заблокировать учетную запись пользователя, либо сначала связаться с ними.
Также было бы неплохо предоставить пользователю определенную степень свободы, так что если у него есть одно место, то на заднем конце будет возможно, возможно, 2 места в месяц (период перехода), это будет в случае, если пользователь покупает новый компьютер или устанавливает новый жесткий диск.