rlgentry Ответов: 1

У меня есть существующий ASP.NET проект веб-формы. Я хочу добавить безопасность для учетных записей


Мое существующее приложение веб-формы не имеет безопасной регистрации, логина или забытого пароля. Я должен кое-что добавить. Кроме того, я использую vb.net.

Цель состоит в том, чтобы потребовать подтверждение по электронной почте, хэшированный пароль в базе данных, опцию забыли пароль

Что я уже пробовал:

Я попробовал создать новое приложение и использовать ASP.Net Identity, но когда я копирую файлы и пакеты в существующий проект, он терпит неудачу. Я также попробовал другой путь, и он потерпел неудачу.

Можно ли это сделать? Какие еще у меня есть варианты?

ZurdoDev

Самый простой вариант, для меня, это просто написать его самостоятельно. Я знаю, что некоторые люди любят ASP.Net но я обнаружил, что он никогда не давал мне достаточного контроля над процессом, поэтому я не использую его.

rlgentry

Я открыт для этого, но как насчет безопасности пароля? Я не знаю, как хэшировать пароль.

ZurdoDev

Хеширование-это просто. Просто google c# hash password. Множество примеров.

DerekT-P

"он терпит неудачу" - это не так много информации, чтобы мы могли посоветовать вам, почему он терпит неудачу и как остановить его неудачу.

1 Ответов

Рейтинг:
0

DerekT-P

В вашем app_Code папка, создайте новый класс, который наследует MembershipProvider. Вам нужно будет импортировать System.Configuration.Provider, System.Security.Cryptography, System.Web.Configuration и System.Net.Mail.

Если вы попытаетесь скомпилировать этот новый класс, вы увидите, что вам нужно переопределить множество методов. Для большинства из них вы можете просто добавить определение метода и создать новое исключение NotImplementedException. В ValidateUser, добавьте код, необходимый для проверки комбинации имени пользователя и пароля; это, вероятно, будет включать в себя извлечение строки из таблицы пользователей с столбцами username, hashedpassword и salt. Это зависит от вас, как/откуда вы получаете эти данные. (Не забудьте параметризовать любой запрос d/b, чтобы люди не вводили имя пользователя ';drop table users;--' :-)

Затем на странице входа в систему добавьте элемент управления типа <aspx:Login> и один из типов <aspx:PasswordRecovery>. Установите свойства так, как вы хотите, вероятно, что-то вроде

<asp:Login runat="server" ID="login1" DestinationPageUrl="~/index" 
    FailureText="Username or Password not recognised" 
    BorderPadding="10"
    InstructionText="If you are not an authorised user of the system, please do not attempt to log in"
    DisplayRememberMe="true"
    RememberMeSet="true" 
    RememberMeText="Stay logged in on this computer" />
<asp:PasswordRecovery runat="server" ID="passwordRecovery" ClientIDMode="AutoID" 
    BorderPadding="10" 
    SubmitButtonText="Reset P/W" 
    SuccessText="A new password has been emailed to you" 
    Usernametitletext="Request password reset"                 
    UserNameLabelText="User name:"  />  
Далее, вам нужно рассказать ASP.Net чтобы использовать ваш новый код. В Web.Config, в <system.web> раздел, добавьте следующее:
<membership defaultProvider="MyProvider" userIsOnlineTimeWindow="15">
  <providers>
    <clear/>
    <add name="MyProvider" description="My Membership provider" type="MyType" connectionStringName="MyConnection" applicationName="MyApplication" enablePasswordRetrieval="false" enablePasswordReset="false" requiresUniqueEmail="false" requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false" passwordFormat="Hashed"/>
  </providers>
</membership>
<authentication mode="Forms">
  <forms loginUrl="login.aspx" protection="All" timeout="10080" defaultUrl="index.aspx" slidingExpiration="true" cookieless="UseCookies" requireSSL="false" name="MyAuth"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>
Замените все значения атрибутов, которые начинаются "Мой"с тем, что вы хотите / назвали свой класс. (На самом деле единственные, которые должны соответствовать чему-то еще, - это MyConnection, который должен быть ссылкой на одно из ваших имен connectionString, и Тип mytype это должно быть имя нового класса членства, который вы создали ранее. Любой запрос на ваш сайт теперь будет автоматически перенаправляться на страницу входа в систему (логин.aspx-файл), который запросит у пользователя имя пользователя + пароль. После проверки (вашим классом) пользователь будет перенаправлен на индекс.aspx-файл и последующие запросы будут аутентифицированы.

Вам потребуется указать данные SMTP-соединений в веб.конфиг тоже, для сброса пароля по электронной почте.

Это всего лишь краткий обзор, но он указывает вам правильное направление. Google "ASP.Net поставщик членства" и проверьте документацию для контроля входа в систему. Как только вы сделаете это однажды, вы обнаружите, что это легко сделать снова. Вы можете добавить "location"записи в ваш веб-конфиг, если есть страницы, к которым нужно получить доступ без входа в систему (например, экран "прощай" после выхода из системы!)