2010-11-16 3 views
1

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

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

ответ

1

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

Cheers!

+0

Спасибо большое, я сделал это между тем через мой собственный MemberhipProvider - просто переопределил ValidateUser, и он сработал - но ваше решение еще проще ... –

2

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

public virtual ActionResult LogOn(LogOnModel model, string returnUrl) 

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

Например:

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); 
    } 
} 

надеюсь, что это поможет. С уважением

0

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

+0

Я думал о хранении User/Passwd insinde файла xml или web.config. –

5

То, что я наконец-то было:

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. Thx для вашей помощи.

+0

это очень просто для личных сайтов с одним логином и без реальных пользователей – 5uperdan

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