如何在整个站点MVC上添加授权

时间:2017-03-14 22:41:17

标签: c# asp.net-mvc authentication

我的网站中有2个控制器,其中一个用于登录页面,其余的是我的实际应用程序。我的登录目前正常,它将检查我的数据库并重定向到所需的页面。

但我不知道最好的方法是进行实际的授权检查,因为如果有人写了重定向的URL,他们也会加载页面。我研究并提出了Owin,但它看起来太复杂了,它是最好的方式吗?

1 个答案:

答案 0 :(得分:1)

您可以创建自己的AuthorizeAttribute并覆盖AuthorizeCore方法

  1. 当用户登录时 - 您将会话添加到会话

    Session["IsLogin"] = true;
    
  2. 创建一个继承AuthorizeAttribute和覆盖AuthorizeCore的属性,以便:

    public class SimpleAuthorizeAttribute : AuthorizeAttribute
    {
    
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
           if(Session["IsLogin"] != null && Session["IsLogin"] == true)
           {
              return true;
           }
           else
           {
              return false;
           }
        }
    }
    
  3. 将属性应用于您的控制器

    [SimpleAuthorize]
    public class NeedLoginController : Controller
    {
    }  
    
  4. 如果您想更改未经授权的用户重定向的位置,您可以在web.config

    进行设置
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" />
    </authentication>  
    

    或覆盖HandleUnauthorizedRequest,以便:

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary(
                        new
                            { 
                                controller = "Account", 
                                action = "Login" 
                            })
                    );
    }
    
  5. AuthorizeAttribute是asp .net mvc中的action filter 有关动作过滤器的更多信息,请查看msdn https://msdn.microsoft.com/en-us/library/dd410209(v=vs.100).aspx

    中的教程