Вход в систему клиента - как безопасно хранить учетные данные на стороне клиента? - PullRequest
17 голосов
/ 01 октября 2009

Поскольку многие API предоставляют удаленный доступ к своим данным через комбинацию пользователь / пароль, Мне было интересно, какой способ хранения этих ценностей был наиболее надежным и надежным способом (даже если 100% невозможен), чтобы связать их напрямую, не спрашивая каждый раз о них.

Ответы [ 3 ]

16 голосов
/ 01 октября 2009

Я рекомендую один из трех подходов:

  • Избегайте хранения пароля при использовании токенов аутентификации. В этой модели пользователь регистрируется один раз, а сервер генерирует уникальный, большой, разреженный токен, который клиент может сохранить и использовать в качестве своего «пароля» для входа. Сервер принимает этот токен только от одного клиента за раз, поэтому, если два клиента пытаются использовать его одновременно, токен становится недействительным. Токен также обычно становится недействительным по прошествии некоторого времени (1 неделя, 2 недели, год, что угодно). Когда токен становится недействительным, пользователь должен снова войти в систему вручную, и процесс повторяется. Это в основном подход Gmail и аналогичных логинов веб-сайтов.

  • Если вам необходимо сохранить пароль, я рекомендую использовать ОС для его управления. Windows и Mac имеют хорошие системы безопасного хранения данных (DPAPI и Keychain соответственно). Linux не имеет хорошего всегда доступного решения, так что это зависит от вашего рынка. Преимущество использования ОС состоит в том, что ОС может обеспечить защиту, которую вы не можете легко обеспечить самостоятельно, и пользователь может централизованно управлять общей защитой хранилища ОС (с использованием смарт-карт и т. Д.) До уровня, который вы вряд ли сможете воспроизвести. Безопасные хранилища ОС также обычно весьма удобны для пользователя.

  • Если ни один из этих параметров не задан, сохраните зашифрованный файл с мастер-паролем, который пользователь должен вводить при каждом запуске приложения. Вот как работает Firefox (или, по крайней мере, так было в прошлый раз, когда я выглядел, что уже давно). Это достаточно безопасно, но гораздо менее удобно для пользователя (а низкое удобство часто означает низкое усвоение пользователями или плохое использование через более простые пароли и т. Д.). Я бы исследовал код Firefox как пример того, как это реализовать.

1 голос
/ 01 октября 2009

Лучшим способом было бы положиться на кого-то другого, чтобы хранить их и доверять этой стороне вместо этого. Но если вам нужен контроль, я бы предложил почитать хорошую книгу о безопасных системах, а затем подумать еще раз. Есть много переменных, которые необходимо учитывать, и в большинстве случаев вы просто уменьшаете риск по сравнению со стоимостью.

0 голосов
/ 01 октября 2009

KeePass предоставляет даже API для использования разработчиками.

...