Настольное приложение .NET, запоминающее вход в веб-сервис - PullRequest
3 голосов
/ 16 марта 2010

Я нахожусь на стадии планирования настольного приложения .NET, которое будет взаимодействовать с веб-службой. Для веб-службы требуются имя пользователя и пароль, и общая функция в приложениях такого типа заключается в сохранении учетных данных пользователя для следующего входа в систему (просто простой флажок «Войти в систему автоматически»).

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

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

Ответы [ 6 ]

3 голосов
/ 16 марта 2010

В Windows есть средство для безопасного хранения учетных данных пользователя. Я нашел эту статью лучшей: http://blogs.msdn.com/peerchan/pages/487834.aspx

1 голос
/ 16 марта 2010

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

byte[] dataToEncrypt = new byte[] { ... }; 

// entropy will be combined with current user credentials 
byte[] additionalEntropy = new byte { 0x1, 0x2, 0x3, 0x4 }; 

byte[] encryptedData = ProtectedData.Protect( 
    dataToEncrypt, additionalEntropy, DataProtectionScope.CurrentUser); 

byte[] decryptedData = ProtectedData.Unprotect( 
    encryptedData, additionalEntropy, DataProtectionScope.CurrentUser); 
0 голосов
/ 16 марта 2010

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

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

Реестр для вас в этом случае похож на файл, просто вы можете попытаться сделать его менее прозрачным для пользователя, использующего его.

0 голосов
/ 16 марта 2010

Если вы можете сохранить учетные данные, а затем получить их, кто-то другой также может получить учетные данные.

Если вы все еще хотите иметь возможность запоминать учетные данные, я бы посоветовал сохранить их на USB-накопителе, который пользователь может взять с собой. Таким образом, учетные данные не скомпрометированы, если компьютер. (Если только USB-накопитель не подключен к компьютеру).

0 голосов
/ 16 марта 2010

Шифрование будет способом пойти. Я сделал то же самое с внутренним приложением, которое зашифровало имя пользователя и пароль в файле XML.

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

Затем, когда ваше приложение перечитывает этот файл для обработки входа в систему, если оно выполняет то же шифрование имени компьютера / IP-адреса / и т. Д., На котором оно работает, но создает хэш, отличный от того, который хранится в файле Ваше приложение будет знать, что файл был скопирован на другой компьютер, оно может отменить его и запросить данные для входа.

0 голосов
/ 16 марта 2010

Я не могу себе представить, почему кто-то пытается найти пароль, когда он или она может войти в систему, не вводя его (потому что вы заполняете его автоматически). Я ошибаюсь?

Кстати, убедитесь, что вы используете https для связи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...