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

vdh*_*ant 9 .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> 
Run Code Online (Sandbox Code Playgroud)

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

Reb*_*cca 16

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

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

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

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

  1. 从ASP.NET MVC 2中排除授权操作
  2. 使用IIS和MVC进行授权的问题.

  • 对于MVC 4版本,请参阅http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous- attribute.aspx (2认同)

Dav*_*ner -1

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

<deny users="?"/>
<allow users="*"/>
Run Code Online (Sandbox Code Playgroud)

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

<allow users="?"/>
Run Code Online (Sandbox Code Playgroud)

  • 正如对该问题的评论所指出的,这个答案不仅是错误的,而且是危险的。 (2认同)