背景 我的团队正在转向asp.net mvc 5,但我们仍然需要支持在ColdFusion中编写的许多应用程序。我们已经实现了一个Asp.net MVC 5应用程序,它将作为访问我们所有ColdFusion应用程序的主要入口点,我们已将每个ColdFusion应用程序放在我们的MVC应用程序内的文件夹中,如下所示
MVCApp
-- InternalApps
-----ColdfusionApp1
-----ColdfusionApp2
我们正试图通过角色控制对Coldfusion应用程序的访问。换句话说,如果您具有ColfusionApp1角色,那么您可以访问MVCApp/InternalApps/ColdfusionApp1
内的文件,所有其他用户将被拒绝访问ColdfusionApp1目录及其包含的文件。
我们通过在MVC的web.config中指定规则来实现对目录中的coldfusion目录和文件的访问控制,就像在这篇文章(Url Authorization with MVC and ASP.NET Identity)中一样,我们对之前的解决方案稍作修改,因为我们想要按https://weblogs.asp.net/gurusarkar/setting-authorization-rules-for-a-particular-page-or-folder-in-web-config
中的角色控制访问权限在IIS中,MVCApp是一个网站,在MVCApp网站下,目录MVCApp/InternalApps/ColdfusionApp1
包含Coldfusion代码,一旦您运行将IIS配置为服务器ColdFusion文件的Adobe ColdFusion Web服务器配置应用程序,该代码就可以访问。
问题: 解决方案似乎工作正常如果不是Coldfusion文件我们在ColdFusion目录中放置一个静态html文件,但是我们放弃ColdFusion文件并使用wsconfig.exe配置这些文件由IIS提供服务的那一刻(Adobe ColdFusion Webserver配置应用程序)然后,即使您为ColdFusion文件指定授权规则.cfm这些文件仍然提供给未经授权的用户。以下是按预期工作的导航网址模式以及无法按预期工作的导航网址模式。
https://localhost/InternalApps/ColdfusionApp1
(阻止访问未经授权的用户并重定向到登录页面)
https://localhost/InternalApps/ColdfusionApp1/index.cfm
(允许任何未经授权的用户访问此文件)
我们认为我们遇到的问题与配置模块和处理程序的顺序有关。对于.cfm文件,似乎有一个处理程序或模块可以在应用授权规则之前处理此请求。
结论:
使用web.config中的location
标记的基于角色的授权规则可以正常工作以防止用户访问目录,但它无法阻止访问该目录中的ColdFusion文件。
环境:
带有IIS 8.5的MS Server 2012 R2
Visual Studio 2015(Asp.net MVC 5,Asp.net身份2)
Oracle 12c数据库
ColdFusion 2016
小部件:
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
</system.web>
<location path="InternalApps/ColdfusionApp1">
<system.web>
<authorization>
<allow roles="ColdfusionApp1"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
</modules>
<handlers>
<add name="HtmlScriptHandler" path="*.html" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" />
<add name="CfmScriptHandler" path="*.cfm" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" />
</handlers>
</system.webServer>