Простая защита пользователя / пароля в asp.net MVC - PullRequest
1 голос
/ 16 ноября 2010

очень простая проблема, может быть, у кого-то есть совет для начинающего MVC, такого как я.Я хочу защитить приложение MVC паролем - необходимо только ввести имя пользователя / пароль - я сделал это через ASPNETDB и SqlMembershipProvider, но, надеюсь, должен быть более простой способ - в веб-формах я сделал это путем добавления пользователя / пароля в web.config.

Нужно ли мне писать свой собственный XmlMembershipProvider для решения этой проблемы?Если да, знаете ли вы действительно простой существующий XmlMembershipProvider, который может сделать это для меня?Большое спасибо заранее ..

Ответы [ 4 ]

5 голосов
/ 16 ноября 2010

Что я наконец-то сделал:

public class MyMembershipProvider : MembershipProvider {
  // ...
  public override bool ValidateUser(string username, string password)
  {
    return FormsAuthentication.Authenticate(username, password);
  }
}

web.config:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" >
    <credentials passwordFormat="Clear">
      <user name="rga" password="XYZ"/>
    </credentials>
  </forms>
</authentication>

...

<membership defaultProvider="XmlMembershipProvider">
  <providers>
        <clear/>
        <add name="MyMembershipProvider" type="Namespace.Of.MyMembershipProvider" 
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
  </providers>
</membership>

Таким образом, не было необходимости менять AccountController. Спасибо за вашу помощь.

2 голосов
/ 16 ноября 2010

Привет, если вы запустили проект MVC с Visual Studio, у вас есть стандартный UserController. Если вы загляните в этот класс, вы найдете следующий метод:

public virtual ActionResult LogOn(LogOnModel model, string returnUrl)

Вы можете использовать свой собственный код в этой функции для проверки пароля и входа в систему.

Например:

public virtual ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if(model.Password == "YourPassword" && model.UserName == "YourUserName")
    {
        FormsService.SignIn(model.UserName, model.RememberMe);
        if (!String.IsNullOrEmpty(returnUrl))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("ActionName");
        }
    }
    else
    {
        ModelState.AddModelError("", "Wrong credentials.");
        return View(model);
    }
}

надеюсь, это поможет вам. Привет

1 голос
/ 16 ноября 2010

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

0 голосов
/ 16 ноября 2010

Почему XML MembershipProvider?Вам просто нужно унаследовать форму IMembershipProvider и реализовать нужные вам функции.

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