2010-04-09 2 views
0

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

  1. В способе А, пользователь вводит ID/пароль

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

  3. Процесс B выполняет проверку подлинности пользователя с ПОЛУЧАЛ ID/Пароль

, что некоторые из стандартных криптографических алгоритмов можно использовать в модели выше?

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

+0

@ Даниэль: нет такой вещи, как «C# .NET». –

+0

@ Даниэль: что такое контекст? ASP.NET? –

+0

@ Daniel: приемлемо ли, что программа не может работать без доступа в Интернет? – davidsleeps

ответ

0

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

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

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

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

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


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

+0

как скрыть код, чтобы никто не мог декомпилировать его на стороне клиента? Я думаю, что если вы справитесь с проблемой декомпиляции, служба WCF через https - это хороший способ общения по небезопасным каналам. –

+0

@Shoaib: Я бы не стал обманывать код клиента. Но хорошая идея с WCF, тем более, что я только заметил комментарий плаката, что клиент бесполезен без доступа к серверу. –

0

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

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

Смежные вопросы