Аутентификация пользователя в автономных веб-приложениях - PullRequest
14 голосов
/ 24 октября 2011

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

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

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

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

Есть ли у меня другие варианты?

Ответы [ 2 ]

11 голосов
/ 24 октября 2011

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

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

2 голосов
/ 09 января 2014

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

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

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

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

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

...