Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 5 MVC5身份验证:在每个控制器或基本控制器上授权属性_Asp.net Mvc 5_Asp.net Identity_Owin_Authorize Attribute - Fatal编程技术网

Asp.net mvc 5 MVC5身份验证:在每个控制器或基本控制器上授权属性

Asp.net mvc 5 MVC5身份验证:在每个控制器或基本控制器上授权属性,asp.net-mvc-5,asp.net-identity,owin,authorize-attribute,Asp.net Mvc 5,Asp.net Identity,Owin,Authorize Attribute,我一直在研究保护MVC5应用程序的最佳方法 我们有一个Web.csproj和许多WebAPI控制器,还有一个MVC站点,它有两个区域——一个是管理员,然后是面向公众的网站 读完之后,我决定采用这种方法 然而,我个人不同意使用基本控制器(我的一些推理) 因此,考虑到我正在使用MVC 5(ASP.Net身份和OWIN身份验证)-有人能解释一下每种方法的优缺点吗?我总是使用基本控制器,原因不仅仅是身份验证和授权 为了回答您的问题,我们最终做的是使用复杂的规则滚动我们自己的自定义授权属性,这些规则都继承

我一直在研究保护MVC5应用程序的最佳方法

我们有一个Web.csproj和许多WebAPI控制器,还有一个MVC站点,它有两个区域——一个是管理员,然后是面向公众的网站

读完之后,我决定采用这种方法

然而,我个人不同意使用基本控制器(我的一些推理)


因此,考虑到我正在使用MVC 5(ASP.Net身份和OWIN身份验证)-有人能解释一下每种方法的优缺点吗?

我总是使用基本控制器,原因不仅仅是身份验证和授权

为了回答您的问题,我们最终做的是使用复杂的规则滚动我们自己的自定义授权属性,这些规则都继承自AuthorizeAttribute。它非常简单,您所要做的就是从给定属性继承,然后覆盖OnAuthorization和AuthorizeCore方法


通常,根据我们的baseController类,我们所有的控制器都不允许anon访问。从那以后,事情就变得越来越复杂了。但是,对于这样的事情使用基类并在此基础上进行构建总是有意义的。如果您需要快速进行非常广泛的系统更改,您可以将其点击到基类中,这样就可以了。

MVC 5中当前的做法是将
authorized属性
应用为全局过滤器,并使用
allowanonymous属性打开单个操作/控制器

因此,在App\u Start\FilterConfig.cs中添加以下行:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        ... existing filters

        // use the [AllowAnonymous] attribute to open up individual Actions/Controllers
        filters.Add(new System.Web.Mvc.AuthorizeAttribute());
        filters.Add(new RequireHttpsAttribute());
    }

> Stord:对于好的度量,我还添加了AdvestHutPSAtvices,因为每个带有ASP.NET身份的身份验证请求都带有AuthCookie,AuthCookie如果在普通HTTP上承载,则容易受到中间人攻击。

这篇文章不显示如何使用全局过滤器吗?我相信基本控制器被推荐用于MVC 1和2…@dima是的,你是对的…我对文章底部的以下引语感到困惑:“让我非常清楚这一点。保护MVC应用程序的唯一受支持的方法是使用带有[Authorize]的基类属性,然后让每个控制器类型子类化该基本类型。任何其他方式都会打开一个安全漏洞。“然而,我认为在试图通过路由约束保护MVC应用程序的上下文中说……一个严重的‘不’。他在某些方面是对的,只是应该说关于全局过滤器。。。。我不明白你为什么不利用全局过滤器,使整个网站安全,只允许匿名访问某些操作,如登录、注册etcso以回答你的问题-既不允许,也不允许基本控制器,也不允许在每个控制器或操作上设置Authorize属性。。。全球过滤器是这些天的发展方向。。。你不需要发明已经存在的东西