Это сложный вопрос.Я собираюсь начать с двух альтернативных вариантов, которые вы должны рассмотреть сначала (2FA и короткие сеансы), а затем перейти к идентификации оборудования позже в моем ответе.
Другой вариант - использовать уникальное устройство как частьдвухфакторная аутентификация (2FA).Используйте номер телефона и отправляйте SMS-сообщение, содержащее несколько случайных цифр, на свой телефон при каждом входе в систему (например, Twilio - достойный сервис для этого, но может стоить довольно дорого, если вы отправляете много SMS-сообщений).Это позволяет кому-либо войти в систему с любого устройства по своему выбору, но у него должно быть соответствующее устройство в его распоряжении.Чтобы ограничить вход в систему одним плавающим устройством, вы можете настроить его таким образом, чтобы для одного аккаунта одновременно разрешался только сеанс.Таким образом, если кому-то еще удастся войти (очень сложно), другое устройство будет выгнано.Привязка учетной записи к выданному компанией телефону и использование SMS означает, что устройство почти наверняка находится в распоряжении человека во время входа в систему.
Другой вариант - это интегрировать вашу систему входа в систему с YubiKey или другимаппаратный ключ, который реализует протоколы U2FA или FIDO2.Поддержка этих устройств требует поддержки браузера напрямую или через расширения.Ключи также довольно дорогие.
Отправка кода 2FA по электронной почте и использование Google Authenticator (приложения) - это два дополнительных варианта 2FA, которые не требуют затрат.Я реализую оба из них в программном обеспечении с открытым исходным кодом CubicleSoft Single Sign-On (SSO):
https://github.com/cubiclesoft/sso-server
Я также рекомендую использовать короткий тайм-аут сеанса (например, 5-минутное плавающее окно),Пока вкладка браузера открыта, отправляйте периодическое сердцебиение на сервер, чтобы поддерживать сеанс (или не требовать взаимодействия для поддержания сеанса - это зависит от приложения).Как только все вкладки закрыты, сеанс завершается, что требует от пользователя повторной регистрации.Приведенный выше серверный продукт SSO также поддерживает управление короткими сеансами из коробки.Сочетание механизма 2FA с короткими сеансами снижает вероятность входа нескольких пользователей в одну учетную запись на нескольких устройствах.
Сбой оборудования, и люди приобретают новое оборудование, когда появляются новые блестящие вещи.Привязка аутентификации к определенному оборудованию может вызвать реальную головную боль, когда пользователю придется переключать устройства.
Однако, если вы ДЕЙСТВИТЕЛЬНО хотите привязать регистрацию к одному устройству, вам следует заглянуть вобщее направление «дактилоскопия веб-браузера».Отрасли рекламы и аналитики постоянно ищут способы сделать то, что вы описываете, чтобы они могли точно отслеживать человека, путешествующего по сети, не полагаясь на куки-файлы браузера, так что информация об отслеживании сохраняется, даже если куки / localStorage удалены.
Этот сайт упоминает и демонстрирует несколько методов:
https://browserleaks.com/
Другой вариант - использовать идентификаторы подключенного аппаратного устройства:
http://cubicspot.blogspot.com/2019/01/hardware-fingerprinting-with-web-browser.html
К телефонам и планшетам почти всегда подключена камера.Ноутбуки вообще тоже делают.Настольные ПК могут этого не делать.
Однако, если вы полагаетесь только на этот или любой другой конкретный API, это может измениться или сломаться в будущем.
Предупреждение: Делать что-то уникальноеИдентификация устройства или пользователя без их явного разрешения является возможным нарушением GDPR и / или Закона штата Калифорния о защите прав потребителей от 2018. Ваш работодатель должен проконсультироваться с юристом, если они ведут бизнес в ЕС или Калифорнии, и будет использовать вашу систему входа в систему с пользователями вэти локали.