Как гарантировать, что пользователь не сможет войти в систему с другого устройства или браузера, который не определен?

#security #authentication #logging #notifications

#Безопасность #аутентификация #ведение журнала #уведомления

Вопрос:

Я хочу, чтобы мой пользователь не мог войти в систему с другого устройства или браузера, после идентификации этого устройства, на котором он вошел в него. С помощью каких технологий и библиотек я могу этого добиться?

Например, когда пользователь А входит в телефон, он / она не может одновременно войти в систему на компьютере.

И я хочу, чтобы администрация получала уведомления, когда пользователь B пытается войти в систему с информацией пользователя A.

Я открыт для всех видов информации. Большое вам спасибо.

Ответ №1:

Вход в веб-приложения обычно выполняется с помощью файлов cookie, которые хранятся session id в каком-либо хранилище.

Вы можете просто отменить авторизацию старого сеанса после нового входа в систему или использовать простую логику с меткой времени последнего запроса и идентификатором сеанса.

Это может сделать любой стек веб-технологий.

Чтобы получить идентификатор устройства, вы можете использовать это в javascript: var deviceID = MediaDeviceInfo.deviceId;

Для мониторинга подключений пользователей в реальном времени используйте сокеты, например: (Node.js Socket.io )

Ответ №2:

насколько я знаю, если вы хотите получить информацию об устройстве, например IMEI телефона, это возможно только с помощью собственных приложений для телефонов, которые различаются в зависимости от платформы и устройства, для которых вы создаете. в случае веб-приложений я не знаю никаких способов идентифицировать устройства друг от друга по идентификатору устройства. итак, давайте отложим информацию об устройстве и внедрим наш собственный способ распознавания устройств, чтобы предотвратить вход на несколько устройств только через одну учетную запись.

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

позвольте мне описать метод: нам нужно место для хранения токена, специфичного для каждого пользователя, после входа в систему на стороне пользователя. поэтому мы могли бы использовать заголовок или файл cookie. я думаю, что использование cookie проще реализовать, потому что установка заголовка для каждого запроса является болезненной, например, вам нужно добавить параметры для получения запросов на передачу этого токена на сервер.

итак, используя файл cookie, вам необходимо сгенерировать токен в вашем бэкэнде после входа пользователя в систему и сохранить его в базе данных для этого пользователя и передать его клиенту как файл cookie. для того, чтобы каждый запрос считался действительным, токен в файле cookie должен совпадать с токеном в базе данных зарегистрированных пользователей, в противном случае выйдите из системы и уведомите супервизора, например, по электронной почте. для каждого проверенного запроса (токен в файле cookie совпадает с токеном в базе данных) вы должны отозвать этот токен и сохранить его в базе данных вместо предыдущего, чтобы таким образом истек срок действия старого токена, и обновить пользовательский файл cookie отозванным токеном.

как это предотвращает использование нескольких зарегистрированных устройств? когда пользователь входит в систему с учетными данными учетной записи на других устройствах или других агентах, токен будет отозван, и когда старое устройство делает запрос, токены не совпадают, поэтому реализованные коды выводят пользователя из системы, и если он попытается снова войти в систему, то же самое произойдет для второго устройства и так далее. сценарий одинаков для любого количества устройств, если учетные данные для входа являются общими для многих, одновременно можно входить в систему только с одного устройства.

этот метод не дает нам информации об устройстве, но решает проблему одновременного входа в систему нескольких устройств.

  • для обеспечения безопасности зашифруйте файл cookie.

  • токен отзывается при каждом запросе, поэтому его нельзя использовать вместе с учетными данными

  • когда пользователь выходит из системы, поле токена должно быть очищено amp; очищенное поле токена подписывает действие OK для входа в систему для любого устройства с этими учетными данными

извините, если это стало длинным, с наилучшими пожеланиями 😉