代码之家  ›  专栏  ›  技术社区  ›  Tobias Pirzer

asp.net MVC中的简单用户/密码保护

  •  1
  • Tobias Pirzer  · 技术社区  · 14 年前

    一个很简单的问题,也许有人给我这样的MVC初学者一个建议。我想用密码保护一个MVC应用程序-只需要用户/密码-我通过ASPNETDB和SqlMembershipProvider做到了,但希望有一个更简单的方法-在webforms中,我通过向web.config添加用户/密码做到了。

    我真的需要编写自己的XmlMembershipProvider来解决这个问题吗?如果是的话,你知道一个非常简单的XMLeMeMistPosivor可以为我做这件事吗? 多谢提前。。

    4 回复  |  直到 14 年前
        1
  •  1
  •   Community CDub    8 年前

    您不需要使用任何成员资格提供者来保护您的应用程序。您只需提供一个服务来验证用户凭据。你可以看看 here 想知道怎么做。基本上,您需要生成salt,然后使用salt散列用户密码(以及提供的密码)。然后将salt和散列密码存储在DB中。试试看,不难。验证用户凭据后,可以使用我编写的代码 in this SO question 使用窗体身份验证。

    干杯!

        2
  •  5
  •   Tobias Pirzer    14 年前

    我最后做的是:

    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。 谢谢你的帮助。

        3
  •  2
  •   hwcverwe    14 年前

    嗨如果你已经用visual studio启动了一个mvc项目,你就有了标准的用户控制器。如果您查看这个类,您将发现以下方法:

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

    希望对你有帮助。 当做

        4
  •  0
  •   Ilya Smagin    14 年前

    为什么? XML格式 会员提供商?你只需要继承表格 IMembershipProvider 实现你需要的功能。