Подтвердить что ты не робот

Аутентификация пользователя в автономных веб-приложениях

Я создаю веб-приложение, которое должно работать в автономном режиме. Система построена для захвата транзакций продаж. Основная часть "автономной" части довольно проста - мне просто нужно хранить данные локально и синхронизировать их, когда я снова в сети. Пока что так хорошо.

Проблема заключается в аутентификации. Приложение будет работать на общей машине с одной учетной записью пользователя ОС. Если я не в сети, как я могу аутентифицировать пользователя?

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

Один из подходов, о котором я думаю, связан с кэшированием хэшей паролей на стороне клиента в IndexedDB. Только ограниченный набор пользователей будет допущен к входу с определенной общей машины, поэтому мне не нужно будет кэшировать всю базу данных паролей локально. Предполагая, что у меня есть хорошая политика паролей (требования сложности и срока действия) на месте, и сами хеши являются безопасными (bcrypt), насколько ужасна идея?

Есть ли у меня другие возможности?

4b9b3361

Ответ 1

Это эффективно, как Windows (и другие системы) работают, когда машина не может добраться до контроллера домена (например, вы берете ваш рабочий ноутбук на самолет и вам нужно войти в свой ноутбук без подключения). Ваша машина записала кэш вашей пары имя пользователя | пароль и позволит вам через эти учетные данные, даже если он отключен.

Я думаю, что, вообще говоря, хранение хэшей пароля имени пользователя очень безопасно, предполагая, что вы хэшируете их разумно (например, используя соль, используя IV и т.д.). Одно воздействие, которое вы хотите продумать, - это сделать хэш файл "побегом". Если это конфиденциальные данные, вы захотите быть чрезвычайно осторожными - и это может быть даже неприемлемо, но если это не очень чувствительные данные, то вы, вероятно, в порядке: с хорошим хешированием, я думаю, вы должны быть разумно (но, конечно, не полностью).

Ответ 2

Возможно, это немного несвязано, но я использую этот подход в моем проекте nodejs. Когда пользователь аутентифицируется по имени пользователя и паролю, ему присваивается уникальный ключ API, используемый только для данного сеанса.

Каждый пользователь может иметь только один ключ API.

Этот ключ API добавляется к любому запросу, выполняемому на сервер, для аутентификации пользователя.

Когда пользователь выходит из системы, ключ API удаляется. Также ключ API можно очистить на сервере, что заставляет пользователя проходить аутентификацию на сервере еще раз.

Я могу предоставить ссылки на узловые программы open source, которые используют этот подход, если вы заинтересованы.