Если вы хотите выполнить аутентификацию устройства, вы можете рассмотреть возможность взаимной аутентификации SSL. Здесь вы должны развернуть сертификат идентификации клиента на каждой конечной точке, которую хотите аутентифицировать. Затем вы настраиваете сервер так, чтобы он требовал аутентификации клиента, чтобы клиенту пришлось представлять действительный сертификат идентификации для формирования туннеля SSL.
Это, конечно, не идеальное решение. На самом деле, это представляет собой те же слабости, что и другие решения (в различной степени). Как только ваши сертификаты идентификации клиента перейдут к вашим клиентам, они будут вне вашего контроля; Если клиент передаст свой сертификат кому-либо еще, вы потеряете аутентификацию устройства, основанную на нем. Сертификаты идентификации SSL обычно хранятся в хранилище ключей на клиенте, которое шифруется паролем или другими учетными данными, необходимыми для их разблокировки. Хотя сертификат клиента все еще может быть скомпрометирован, он несколько сильнее, чем просто cookie или что-то в этом роде (при условии, что у вас нет клиента, который пытается выдать свои учетные данные). Кроме того, вы хотели бы придумать некоторую процедуру проверки, которую клиент должен будет пройти, хотя бы для того, чтобы получить учетные данные в первую очередь (откуда мне знать, что это клиентское устройство, которое я хочу запомнить / зарегистрироваться?).
Помните, что эти типы подходов выполняют только аутентификацию device , а не пользователей. Для проверки подлинности устройства уже разработано больше углубленных схем, чем я упомянул; например, 802.1x - это сетевой протокол, в котором конечной точке необходимо предоставить сертификат на стороне клиента сетевому коммутатору для подключения к локальной сети. Это выходит за рамки сценария веб-приложения, например, того, что вы описали, но идея та же (наложите криптографические учетные данные на клиент и проверьте его для установления соединения).
Это, как и все другие вопросы безопасности, является решением о риске. Что вы пытаетесь достичь с помощью такой контрмеры? Какие угрозы вы пытаетесь предотвратить, и каковы последствия, если кто-то входит в систему на незарегистрированном устройстве? Только ваша ситуация может ответить на эти вопросы и позволить вам увидеть реальный риск, если вам нужно / нужно уменьшить его, и, если да, насколько сильное решение вам нужно, чтобы снизить уровень риска до приемлемого уровня?