如何允许所有用户访问具有集成身份验证的网站中的一条路由?

时间:2010-03-31 04:37:37

标签: .net asp.net-mvc authorization web-config integrated-security

我有一个使用集成安全性的ASP.Net MVC应用程序,我需要能够授予对特定路由的开放访问权限。有问题的路线是~/Agreements/Upload。我尝试了一些事情,到目前为止没有任何工作。

<configuration> 
  <location path="~/Agreements/Upload">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration> 

在目录安全性和IIS下的IIS中;身份验证方法我只选择了“集成Windows身份验证”。现在,这可能是我的问题的一部分(尽管IIS允许上面的IIS没有)。但是,如果是这种情况,我该如何配置它以便集成安全性工作但允许未经过身份验证的人访问给定路由?

2 个答案:

答案 0 :(得分:16)

在ASP.NET MVC中,您不应该使用web.config中的location元素。而Web表单引擎映射到磁盘上的物理文件,而MVC引擎使用路由。这意味着您可能会无意中允许通过自定义路径访问“受保护的控制器”。

保护ASP.NET MVC应用程序的推荐方法是使用Authorize属性,如下例所示:

public class HomeController : Controller
{
    [Authorize]
    public ActionResult Index()
    { 
        return View();
    }
}

控制器操作是您要保护的而不是路径。在ASP.NET MVC安全性方面,Levi Broderick对这个问题非常直言不讳:

  1. Excluding an action from authorization in ASP.NET MVC 2
  2. Problem with Authorization with IIS and MVC

答案 1 :(得分:-1)

您还需要在IIS中允许匿名访问,否则只有经过Windows身份验证的用户才能访问您网站中的任何位置。您应该默认拒绝匿名用户访问。

<deny users="?"/>
<allow users="*"/>

<location>部分,允许匿名用户。

<allow users="?"/>