我有一个受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="?"/>
,或者从一开始就有更好的方法来解决这个问题吗?
谢谢!
答案 0 :(得分:0)
控制器操作的身份验证必须由[Authorize]属性处理。 web.config设置仅适用于物理文件。
如果您不想在每个控制器上放置[Authorize]属性,则可以创建包含[Authorize]属性的基本控制器类。从该基本控制器类继承的所有控制器都将自动要求身份验证。
就个人而言,我并不觉得手动将[Authorize]属性添加到每个控制器并且更喜欢更精细的控制级别。