自定义身份validation和ASP.NET MVC

我有一个在ASP.NET 4中构建的内部Web应用程序。 我们很难使用其他团队构建的身份validationAPI。 如果该站点的用户已成功通过该站点的身份validation,我希望他们可以访问整个站点。

ASP.NET WebForm时代,我只是习惯在会话中保留自定义User对象。 如果该对象为null,我知道用户未经过身份validation。 在MVC是否有类似但改进的方法。 如果可能的话,我不想构建自己的ASP.NET Membership模型提供程序。 这样做最简单的方法是什么?

您可以将Forms AuthenticationAuthorize attibute结合使用,如下所示,

要限制对视图的访问:

将AuthorizeAttribute属性添加到操作方法声明中,如下所示,

 [Authorize] public ActionResult Index() { return View(); } 

在web.config中配置表单身份validation

    

登录发布操作:如果用户有效,则设置身份validationcookie

 [HttpPost] public ActionResult Login(User model, string returnUrl) { //Validation code if (userValid) { FormsAuthentication.SetAuthCookie(username, false); } } 

注销动作:

 public ActionResult LogOff() { FormsAuthentication.SignOut(); return RedirectToAction("Index", "Home"); } 

您可能希望拥有自定义授权filter 。 这是一个例子: MVC中的自定义filter 。 然后,您可以在app start上全局应用此filter(使用RegisterGlobalFilters )。

 public class LegacyAuthorize : AuthorizeAttribute { public override void OnAuthorization(HttpActionContext actionContext) { if (HttpContext.Current.Session["User"] == null) base.HandleUnauthorizedRequest(actionContext); } } 

然后在你的global.asax你会有这样的东西:

 GlobalFilters.Filters.Add(new LegacyAuthorize()); 

您可以尝试这样的事情:

 FormsAuthentication.SetAuthCookie(username, rememberMe); 

要为经过身份validation的用户设置cookie,然后只需使用Controller或需要身份validation的Action上的[Authorize]属性。

尝试使用Google搜索该主题以获取更多信息,您将在MVC中找到许多有关身份validation和授权的内容。

您可以在MVC中执行的表单中执行的所有操作,只需在控制器登录操作中设置会话变量即可。

或者您可以这样做:在登录操作中添加formsauthentication.setauthcookie("username")

在此之后,使用[Authorize]关键字的任何操作都将允许当前用户进入。

您可以通过在登录成功时简单地放置会话变量值来执行会话身份validation。 例如

 public ActionResult Index(Models.Login login) { if (ModelState.IsValid) { Dal.Login dLogin = new Dal.Login(); string result = dLogin.LoginUser(login); if (result == "Success") Session["AuthState"] = "Authenticated"; } return View(); } 

现在的诀窍是,您应该拥有所有视图的公共布局页面,您必须检查它们的身份validation。 在这个布局页面中,只需像这样进行剃刀检查 –

  @if (Session["AuthState"] != "Authenticated") { Response.Redirect("~/login"); } // other html  

我一直在我的应用程序管理面板中使用此方法。