У меня есть случай, когда неинтерактивные устройства периодически отправляют данные на сервер через HTTP. Я думаю о том, чтобы использовать аутентификационный подход для проверки правильности запросов от этих устройств.
Сначала устройство просыпается, инициирует ssl-соединение и отправляет свои учетные данные на сервер; сервер проверяет учетные данные и генерирует токен на основе SHA на основе учетных данных + некоторый случайный ввод и отправляет токен обратно на устройство
Этот токен должен присутствовать в качестве заголовка в каждом http-запросе, который отправляет устройство. Сервер будет использовать фильтр сервлетов, который ищет этот заголовок и отфильтровывает сообщения, в которых его нет.
Не передается конфиденциальная информация, я просто хочу убедиться, что устройство, общающееся с сервером, является действительным, а не кто-то пытается возиться с неверными данными. (Wannabe хакеры, сценаристы и т. Д.)
Токен должен храниться где-нибудь, где несколько «узлов» могут проверить, что запрос действителен - где вы порекомендуете сделать это?
Я могу придумать 3 подхода
1) Иметь отдельный веб-сервис, который поддерживает токены и выполняет аутентификацию (я ограничиваю это служебной нагрузкой для каждого запроса)
2) Поддерживайте набор аутентифицированных токенов в сеансе, и пусть контейнер сервлетов позаботится об этом, используя встроенную поддержку кластеризации (не уверен, что это самый надежный способ)
3) Использовать базу данных для хранения токенов и проверки их (с учетом Redis для этого)
Кроме того, я думаю, что в этом подходе есть уязвимость, позволяющая атаковать человека посредине, но поскольку клиент отправляет данные только на несколько минут, я рискую, любые более подходящие подходы будут приветствоваться.