IIS 7.5 Siteminder不保护ASP.net MVC请求

我们正在尝试使用ASP.Net MVC和Siteminder进行单点login。 这是在Windows Server 2008 R2与IIS 7.5。 Siteminder代理版本6QMR6。

问题:Siteminder保护存在的物理文件。 当我们尝试访问一个不存在的文件时,它不保护文件夹。 即使用户访问受保护的文件夹时文件不存在,也必须redirect到login页面。

如何在IIS 7.5中configuration不validation文件是否存在,然后由siteminder进行身份validation。 SiteMinderWebAgent是我们使用ISAPI6WebAgent.dll创build的Handler(通配符脚本映射)

如何保护与Siteminder ASP.Net MVC请求? (添加这个作为我以前的问题没有解决问题)。 MVC请求显示在IIS日志中,但不在Siteminder日志中。

更新:微软支持目前IIS7.5,甚至在早期版本不支持通配符映射在任何两个ISAPI处理程序与*通配符。 目前在我的情况下,Siteminder具有*通配符和asp.net mvc(处理程序是aspnet_isapi)具有*通配符来处理reqeusts。 有序的优先级不适用于与Just *的通配符映射的情况。 没有信服的答案,但会等到明天他们才能回来。

升级到最新版本的Siteminder,删除所有的ISAPI,从ClassicMode移动到IntegratedMode作为所需的MVC / WEB API,然后使用CASiteMinderWebagentModule

忘记围绕黑客MVC / Webapi的整体愚蠢,因为ISAPi和siteminder,MVC / Webapi从来没有被devise成在ClassicMode下运行。

您可以从IISpipe理器通过编辑Siteminder的处理程序,单击请求限制并确保未选中映射checkbox来执行此操作。

或者,如果直接从applicationHost.config执行此操作,请将resourceType设置为“Unspecified”。 这将导致处理程序处理所有请求,无论文件或文件夹是否存在。

这里是来自微软的关于Siteminder的ASP.Net MVC的解释和解决方法。

请求可以由任何一个处理程序执行,但可以由多个模块处理。 当请求进来时,URLRoutingModule将请求路由到MVC的处理程序(如果它在Global.asax的Application_Start事件中定义的路由表中存在的映射),并且从不调用SiteMinder处理程序。 由于只有一个处理程序可以执行请求,在这种情况下,它应该是MVC处理程序SiteMinderlogin页面永远不会出现。 执行请求的一个处理程序是按devise行为。

build议的解决方法:

i)在Global.asax中的AuthenticateRequest方法中,检查请求中是否存在SSO会话cookie。

ii)如果cookie不在那里,那么redirect到另一个SSOlogin页面。

iii)负责authentication的login页面不应该在MVC路由表中。

iv)如果不在MVC路由表中的页面的请求进入,SiteMinder将会起作用,因为URLMappingsModule不会按预期将其路由到MVC处理程序。

v)在此页面上,authentication之后,用户可以被redirect到之前请求的主URL。 由于这次我们有SSO会话cookie,所以请求不会在AuthenticateRequest中redirect,并且会被MVC响应。

我们正在跟踪这项工作。 这必须谨慎执行,因为Siteminder cookie有可能会失效,但不会由siteminder检查,因为请求不会通过siteminder发送MVC请求。

我们的SiteMinder基础设施小组build议我尝试在web.config文件中包含Web代理的处理程序声明,在MVC处理程序之前列出,如下所示:

<system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true" /> <handlers> <add name="wa-handler" path="*" verb="*" type="" modules="IsapiModule" scriptProcessor="%NETE_WA_PATH%\ISAPI6WebAgent.dll" resourceType="Unspecified" requireAccess="None" allowPathInfo="false" preCondition="" responseBufferLimit="4194304" /> <add name="MVC" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="" /> </handlers> </system.webServer> 

这对我们很有帮助,并且在Global.asax中不需要任何特殊的解决方法(例如使用cookie /头部检测和URLredirect)。

即使虚拟文件夹受siteminder保护,我的MVC-2站点也出现同样的问题。

最后找出问题所在。

将应用程序池模式从Integrated中更改为Classic,并且瞧! 问题解决了。 没有做任何configuration更改。