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

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

我们正在尝试使用 ASP.Net MVC 和 Siteminder 进行单点登录。这是在带有 IIS 7.5 的 Windows Server 2008 R2 上。Siteminder Agent 版本 6QMR6。

问题:Siteminder 保护存在的物理文件。当我们尝试访问不存在的文件时,它不会保护文件夹。当用户访问受保护的文件夹时,即使文件不存在,它也必须重定向到登录页面。

如何在 IIS 7.5 中配置在通过 siteminder 进行身份验证之前不验证文件是否存在。SiteMinderWebAgent 是我们使用 ISAPI6WebAgent.dll 创建的处理程序(通配符脚本映射)

如何使用 Siteminder 保护 ASP.Net MVC 请求?(由于我之前的问题没有解决问题,因此添加了此内容)。MVC 请求显示在 IIS 日志中,但不显示在 Siteminder 日志中。

更新 :Microsoft 支持表示,目前 IIS7.5(甚至更早的版本)不支持使用 * 通配符对任何两个 Isapi 处理程序进行通配符映射。目前,在我的例子中,Siteminder 有 * 通配符,而 asp.net mvc(处理程序是 aspnet_isapi)有 * 通配符来处理请求。在只有 * 的通配符映射情况下,有序优先级不起作用。对答案不太满意,但会等到明天他们再回复。

答案1

升级到最新版本的 Siteminder,删除所有 ISAPI,从 ClassicMode 移至 IntegratedMode(因为 MVC / WEB API 需要),然后仅使用 CASiteMinderWebagentModule

忘记围绕 MVC/Webapi 的所有愚蠢行为,因为 ISAPi 和 siteminder、MVC/Webapi 从来没有设计为在 ClassicMode 下运行。

答案2

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

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

答案3

以下是 Microsoft 对 ASP.Net MVC 与 Siteminder 的解释和解决方法。

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

建议的解决方法:

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

ii) 如果不存在 cookie,则重定向到另一个 SSO 登录页面。

iii) 负责身份验证的登录页面不应位于 MVC 路由表中。

iv) 如果收到对 MVC 路由表中不存在的页面的请求,则 SiteMinder 将开始运行,因为 URLMappingsModule 不会按预期将其路由到 MVC 处理程序。

v) 在此页面上,经过身份验证后,用户可以重定向到之前请求的主 URL。由于这次我们有 SSO 会话 cookie,因此请求不会在 AuthenticateRequest 中重定向,而将由 MVC 响应。

我们正在采取这一措施。实施时必须谨慎,因为 Siteminder cookie 可能会失效,但 Siteminder 不会对其进行检查,因为 MVC 请求不会通过 Siteminder。

答案4

尽管虚拟文件夹受到 siteminder 保护,但我的 MVC-2 网站上也遇到了同样的问题。

最终弄清楚了问题所在。

将应用程序池模式从集成模式更改为经典模式,瞧!问题解决了。没有进行任何配置更改。

相关内容