9

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

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

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

4

2 回答 2

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. 在 ASP.NET MVC 2 中从授权中排除操作
  2. IIS 和 MVC 的授权问题
于 2011-03-30T17:20:56.013 回答
-1

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

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

在您的<location>部分中,允许匿名用户。

<allow users="?"/>
于 2010-03-31T05:30:11.767 回答