自定义身份验证和ASP.NET MVC

Bud*_*Joe 27 c# asp.net asp.net-mvc asp.net-mvc-4

我有一个内置的网络应用程序ASP.NET 4.我们很难使用其他团队构建的身份验证API.如果该站点的用户已成功通过该站点的身份验证,我希望他们可以访问整个站点.

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

Jat*_*til 45

您可以按照以下方式Forms Authentication使用Authorizeattibute,

要限制对视图的访问:

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

[Authorize]
public ActionResult Index()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

在web.config中配置表单身份验证

<authentication mode="Forms">
     <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

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

[HttpPost]
public ActionResult Login(User model, string returnUrl)
{
        //Validation code

        if (userValid)
        {
             FormsAuthentication.SetAuthCookie(username, false);
        }
}
Run Code Online (Sandbox Code Playgroud)

注销动作:

public ActionResult LogOff()
{
    FormsAuthentication.SignOut();
    return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下看看这里http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx (3认同)

vol*_*pav 5

您可能希望拥有自定义授权过滤器.这是一个例子:MVC中的自定义过滤器.然后,您可以在应用启动(使用RegisterGlobalFilters)上全局应用此过滤器.

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

然后在你的global.asax你有这样的事情:

GlobalFilters.Filters.Add(new LegacyAuthorize());
Run Code Online (Sandbox Code Playgroud)