Приложение использует подключение к серверу партнёра, для получения большого кол-ва данных и их последующей обработке на стороне клиента. Для подключения к серверу партнёра, необходима авторизация (логин, пароль).
Задача:
Обезопасить ПО, чтобы вначале шло подключение к моему серверу и только после авторизации на моём сервере, клиент подключался к партнёру.
Планирую сервер на инфраструктуре .net core операционная система Debian. Рассматриваю также вариант с Azure, но на данном этапе в этом нет необходимости.
Цели:
- Обезопасить ПО;
- Сделать монетизацию более эффективной, по ежемесячной подписке;
- Должна работать проверка что программа запущена только на одном устройстве;
- Должна быть реализована привязка к «железу ПК». При первом запуске, за соответствующим логином на моем сервере закрепляется какой-либо уникальный ключ, который жестко привязан к «железу» и если пользователь имеет статус демо, то при запуске демо аккаунта на другом ПК, на сервере сохранялся ещё один ключ и закреплялся за данным пользователем, а демо аккаунт заканчивался ровно в срок его окончания. При повторной регистрации демо и запуске ПО на компьютере, данный демо аккаунт вносится в чёрный список и закрепляется за данным пользователем, в случае, если на данном ПК уже была запускалась программа ранее и время предыдущего демо аккаунта истекло.
Данная мера необходима для того, чтобы пользователи не смогли обманывать систему, постоянно регистрируя новые демо аккаунты, повторной переустановкой ОС или создания виртуальных машин. Это хороший стимул для приобретения\продления платной подписки.
Мой сервер, также будет собирать статистику по клиенту, но в будущем.
--
Вопросы:- Как лучше реализовать данную задачу, понимая тот факт, что данные подключения к партнёрскому серверу необходимо передавать по сети, только после авторизации на моём сервере?
Необходим развёрнутый ответ, от людей, которые уже реализовывали задачи такого плана. Возможно у вас найдётся решение получше, нежели передача таких данных.
- Какое подключение лучше реализовать в данном случая, http или сокет, просьба написать ссылки на интересные библиотеки по реализации сокет соединений (C#, .net), если есть?
- Как передавать такие данные, шифровать их или нет, какие готовые решения существуют, просьба написать ссылки на такие решения (C#, .net), если есть?
- Какие готовые решения существуют для получения всех основных характеристик «железа» ПК, процессов, жесткий диск, видеокарта, мат. плата и т.д, дальнейшее конвертирование данных характеристик в уникальный ключ? Интересуют библиотека на платформе .net, язык C#.