Использование веб-сокетов между клиент-сервером для передачи файлов (когда несколько пользователей подключены к одному сокету) - PullRequest
0 голосов
/ 12 марта 2020

В настоящее время я разрабатываю систему, которая позволяет пользователям подключать свои облачные хранилища, такие как Google Drive, Dropbox и др. c, а также подключаться к своей физической файловой системе (персональный ноутбук / ftp-сервер и т. Д. c.), А затем просто открывать единственная страница веб-страницы, где он может найти все файлы в каждом из хранилищ и загрузить их. В моей системе есть 3 основных компонента:

  • A Интерфейс интерфейса пользователя , которые пользователь будет использовать для просмотра файлов из всех различных провайдеров хранения ( React-интерфейс )
  • A бэкэнд-сервер , который выполняет аутентификацию с использованием БД (Mon go) и после аутентификации создает соединения с различными поставщиками хранилища. (Nodejs сервер )
  • A внутренний клиент для запуска ТОЛЬКО на физической файловой системе (персональном ноутбуке), которая будет подключаться к сервер для предоставления файлов в файловой системе. (Node js клиентский сервер )

Теперь я также предоставляю возможность нескольким пользователям подключаться к серверу, проходить аутентификацию и иметь доступ к своему хранилищу. (Я решил использовать API Google и API Dropbox для подключения к серверу (используя OAuth ) и хранить их токены в БД, чтобы им не приходилось каждый раз проходить проверку подлинности при получении файлов.)

Пока что я думаю, что мой дизайн выглядит solid, за исключением клиентской части File System . Я решил использовать Web Sockets для этого ie. клиент подключится к серверу, предоставив учетные данные, и после аутентификации сервер сгенерирует уникальный UUID и сохранит его вместе с данными пользователя в БД, а также отправит UUID клиенту при успешной аутентификации , Клиент будет проверять токен для каждого выброса с сервера. Таким образом, теперь поток имеет вид

  • Каждый раз, когда пользователь запрашивает файл из FS (Файловая система), он отправляет токен вместе с запросом emit.
  • Клиент проверяет, совпадает ли токен с тем, что он получил во время аутентификации, и , если истина , отправит файл.

Теперь, вот где я сомневаюсь является.

Поскольку к серверу может быть подключено несколько пользователей, и у каждого из них может быть открыто соединение FS с использованием сокетов, верно ли, что каждый раз, когда пользователь запрашивает файл из своей файловой системы, all клиент другого пользователя также проверяет, совпадают ли их токены?

Мне кажется, эта часть проекта проблематична c.

Конечно, неактивные клиенты будут иметь тайм-аут, и их соединение будет закрыто, но предположим, что если 1000 пользователей активно используют приложение, то всякий раз, когда пользователь 1 запрашивает файл из своей файловой системы, отправленное событие с сервера с UUID для пользователя 1 также заставит всех остальных 999 пользователей проверить, совпадает ли токен с их токеном.

Есть ли здесь проблема безопасности?

Единственная причина, по которой я хотел установить сокетное соединение, заключается в том, что подключение клиента FS к серверу потребовало бы постоянного соединения. пока ФС жива, и я не знаю, будут ли запросы HTTP безопасными, поскольку порт клиента будет открыт для внешнего мира.

Пожалуйста, дайте мне ваши ценные мысли по этому поводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...