Обработка аутентификации пользователя в .NET? - PullRequest
0 голосов
/ 09 апреля 2010

Я новичок в .NET, и у меня нет большого опыта в программировании. Каков стандартный способ обработки аутентификации пользователя в .NET в следующей ситуации?

  1. В процессе A вводимые пользователем ID / пароль

  2. Процесс A отправляет идентификатор / пароль процессу B по незащищенному общедоступному каналу.

  3. Процесс B аутентифицирует пользователя по полученному идентификатору / паролю

Какие стандартные криптографические алгоритмы я могу использовать в приведенной выше модели?

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

Ответы [ 3 ]

1 голос
/ 09 апреля 2010
0 голосов
/ 09 апреля 2010

То, что вы пытаетесь реализовать, называется DRM, по-видимому, в попытке помешать людям запускать копии вашего программного обеспечения, которые не были зарегистрированы.

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

if (authenticationSucceeded) {
    // Allow access to program
} else {
    // Show error and quit.
}

Все, что нужно сделать, - это декомпилировать эту функцию, вставить ! в оператор if и перекомпилировать ее снова (или напрямую изменить код промежуточного языка). Если они сделают это, они нарушат вашу безопасность.

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


Обновление: постер говорит в комментарии, что программа бесполезна без доступа к удаленной базе данных. В этом случае может иметь смысл предотвращать несанкционированное использование программного обеспечения, а точнее - предотвращать несанкционированный доступ к вашей базе данных. Вы можете использовать WCF для создания безопасного соединения с сервером и требовать отправки вашего имени пользователя и хэша пароля, прежде чем разрешить доступ к остальной части интерфейса. Если имя пользователя / пароль не верны, сервер будет запрещать дальнейшие звонки на ваш сервис. На сервере вы можете хранить разрешенные имена пользователей и пароли в базе данных.

0 голосов
/ 09 апреля 2010

Хотя безопасность определенно меня не устраивает, главная проблема, которая вас здесь беспокоит, - это то, что на шаге 2 данные передаются по общедоступному каналу, поскольку в этом случае вам необходимо реализовать сценарий передачи ключа PGP. или эквивалентная система, так что процесс B способен дешифровать ваш контент из процесса A без возможности для злоумышленника скомпрометировать закрытый ключ, что приведет к дешифруемой информации.

Более предпочтительным способом было бы изменить это так, чтобы шаг 2 передавался по защищенному каналу, как правило, это достигается с помощью SSL-соединения.

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