每当我在过去asp.net认证/授权的工作,我能记住它永远不会用于保护的.htm的.js .css文件(实际上,不是由asp.net ISAPI DLL处理的任何文件)。
一段时间做其他的工作后,我现在已经回来使用VS2010做一些web开发,这个时候,现在情况正好相反。 它看起来好像所有的文件被固定,因为我的登录页面上的图像和.js文件不工作。
我的问题是,是我对最初的假设asp.net如何非文件处理错了吗? 如果没有,什么时候这种变化发生的呢? 以前有在VS2010开发服务器的变化,现在意味着所有文件都通过asp.net处理?
非常感谢。
编辑补充:
我刚刚注意到,当我从本地IIS服务器上运行我的项目,非asp.net文件(例如图像和.js文件)并不安全。 不过,从VS开发服务器上运行,当他们。 显然,这下到配置IIS和开发服务器之间的差异。 这使我另一个问题..是有可能配置VS开发服务器?
不,它不是。 它是如何工作的defualt在IIS 6中(旧的),并在IIS7 +采用经典的管道,但它可以通过路由通过ASPNET ISAPI的所有内容进行更改。
如果您使用的IIS7 +或VS发展论坛的Web服务器(卡西尼)综合管线的所有请求都通过asp.net认证路由。
因为我已经发现了一些有关此问题的详细信息。
IIS 7中集成的管道模式确实会通过相同管道的asp.net内容处理所有文件的请求,这意味着非授权的文件asp.net的行为会发生变化。
但是,为了保持向后兼容性,授权已设置了一个前提条件,会忽略任何不asp.net内容。 这将创建的行为并没有改变外观。
如果你想改变这种行为并确保非asp.net的内容,您可以通过添加以下到Web.config覆盖此前提。
<system.webServer>
<modules>
<remove name="FormsAuthenticationModule" />
<add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
<remove name="DefaultAuthentication" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />
</modules>
</system.webServer>
这将有效消除的HttpModules他们的前提和沿重新添加它们离不开它。
卡西尼号设置为使用集成的管道模式,它不具有向后兼容性的前提条件。 这意味着,如果你使用的是与窗体身份验证的VS2010开发服务器,你必须在这个问题上没有选择,非asp.net的内容将永远是安全的。
文章来源: Has there been a change to the way asp.net authorization / authentication deals with non asp.net files?