0

我们正在考虑将 Orchard 用于内部站点。

我们目前使用Shibboleth进行初始身份验证,它以 POST 格式返回我们的站点http://domain/Shibboleth.sso/{stuff}

在我们当前的 ASP.NET MVC 网站中,我们只需使用以下内容修改 Global.asax:

routes.IgnoreRoute("Shibboleth.sso/{isapiInfo}/{isapiDetails}");
routes.IgnoreRoute("Shibboleth.sso/{*pathInfo}");

不幸的是,Orchard 不允许我们走这条路,所以经过一些研究,它看起来需要添加一个处理程序。

通过 IIS (Server 2008 R2) 这被添加到处理程序组内的 web.config 中:

<add name="Shib" path="*.sso" verb="*" modules="IsapiFilterModule" scriptProcessor="C:\{path}\isapi_shib.dll" resourceType="Either" requireAccess="Script" preCondition="integratedMode" />

我已经尝试了几种不同的变体,但仍然没有骰子。

由于无论如何我都删除了源,我尝试采用简单的方法,即添加两个routes.IgnoreRoute调用并重新构建,但这会导致相同的问题。

如果我删除 Shib 要求,那么 Orchard 就可以正常启动,并且如果我在一个新的 MVC 项目中使用 Shib(并添加了我们的两个 IgnoreRoute 调用),它也可以正常工作。

浏览器返回 404(空白页),所以我感觉 Orchard 仍在抓取请求。

关于如何让果园跳过这条路的任何建议?

4

1 回答 1

1

我最终做了两件事。

首先,我使用 Not Found MVC 作为模板创建了一个新模块。特别是 InstallerModule 代码

我在 system.web > httpModules 中添加了以下内容:

<add name="InstallerModule" type="IgnoreShibboleth.InstallerModule, IgnoreShibboleth" />

我还将相同的内容添加到 system.webServer > modules。

所做的所有代码都是添加到忽略路由中。

routes.IgnoreRoute("Shibboleth.sso/{isapiInfo}/{isapiDetails}");
routes.IgnoreRoute("Shibboleth.sso/{*pathInfo}");

最后一步我真的很接近。我在 system.webServer > handlers 下添加了以下内容,紧随其后<clear />

<add name="Shib" path="*.sso" verb="*" modules="IsapiModule" scriptProcessor="{path-to}\lib\shibboleth\isapi_shib.dll" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,bitness64" />

过去不需要最后一次,但对于 Orchard 正在做的事情似乎是必要的。

于 2013-05-10T20:05:36.340 回答