Windows身份验证& MVC:排除单个文件/路由的正确方法

时间:2011-07-26 21:13:55

标签: asp.net-mvc web-config windows-authentication

我有一个受Windows身份验证保护的MVC 3站点。但是,站点根目录下有一个物理文件,以及一个控制器操作方法(通过自定义路由),无需进行身份验证即可使用。这样做的正确方法是什么?我希望整个站点都受到保护,而我的控制器(或基本控制器类)顶部不需要[Authorize]。在IIS 7上,我在站点根目录下启用了匿名和Windows身份验证。

目前,我的Web.config中有以下(适用)部分:

<authentication mode="Windows" />
<location path="public.js"> <!-- physical file -->
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>
<location path="public.gif"> <!-- custom route to action method -->
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</location>

如果我没有将[Authorize]放在控制器的顶部,我将永远不会被提示输入凭据。我是否只需要某处<deny users="?"/>,或者从一开始就有更好的方法来解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

控制器操作的身份验证必须由[Authorize]属性处理。 web.config设置仅适用于物理文件。

如果您不想在每个控制器上放置[Authorize]属性,则可以创建包含[Authorize]属性的基本控制器类。从该基本控制器类继承的所有控制器都将自动要求身份验证。

就个人而言,我并不觉得手动将[Authorize]属性添加到每个控制器并且更喜欢更精细的控制级别。