【问题标题】:How do I allow all users access to one route within a website with integrated auth?如何允许所有用户访问具有集成身份验证的网站中的一条路由?
【发布时间】:2011-02-02 18:41:10
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

在您的 &lt;location&gt; 部分,允许匿名用户。

<allow users="?"/>

【讨论】:

  • 当我允许在 IIS 中允许匿名访问时,我似乎失去了使用 windows 集成安全性提取用户名的能力...
  • 啊.. 棘手的一点是根据msdn.microsoft.com/en-us/library/wce3kxhd.aspx(ASP.NET 授权)-“应用程序级配置文件中包含的规则优先于继承的规则”
  • 正如对该问题的评论所指出的那样,这个答案不仅错误,而且很危险。
【解决方案2】:

在 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

【讨论】:

  • 对于 MVC 4 版本,请参阅 blogs.msdn.com/b/rickandy/archive/2012/03/23/…
  • @Rick.Anderson-at-Microsoft.com 感谢您的更新。这篇文章很有趣。我们在 MVC3 中实现了一些非常相似的东西来解决匿名访问控制器和/或控制器操作。
猜你喜欢
  • 2020-01-01
  • 2018-10-20
  • 2016-12-27
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多