我设法让 Shibboleth 与 SecureAuth 在托管简单 index.html 的 IIS 服务器上运行,后来又托管了简单的 ASP.net MVC 4 应用程序,两者都运行良好。
不过,今天我尝试简单地让我的应用程序指向一个新的 ASP.net CORE 应用程序。我所做的只是更改 IIS 中的目录,没有什么特别的。我在服务器上安装了 .NET Core 托管,并且它可以正常工作(应用程序运行和加载都很好),直到我需要使用 SecureAuth 重新进行身份验证。在这种情况下,https://mywebsite.com/Shibboleth.sso/SAML2/POST最终结果是 404 而不是 200。我首先想到的是 WebConfig,但我对它了解甚少。这里是旧的,这里是新的,与 Visual Studio 2015 中的默认模板相比没有变化。
是否需要进行任何其他服务器配置,或者 WebConfig 中是否有触发未定义行为的奇怪处理程序?Shibboleth 对我来说很新,所以请放轻松!
编辑:一些额外的细节...在 IIS 版本 8 上,我配置了 ISAPI 和 CGI 限制、ISAPI 筛选器和处理程序映射(未选中“仅当请求映射到...时才调用处理程序”)以指向 Shibboleth DLL。我的所有 Shibboleth 配置文件在旧应用程序上也能正常工作,所以我不明白为什么会这样。
答案1
我注意到您的 web.config 文件不包含任何 shibboleth 配置,例如处理程序部分:
<add name="ShibbolethEndPoints" path="*.sso" verb="*" modules="IsapiModule" scriptProcessor="C:\opt\shibboleth-sp\lib64\shibboleth\isapi_shib.dll" resourceType="Unspecified" preCondition="bitness64" />
当我进行初始设置(使用 IIS UI)以添加处理程序时,此行被添加到我的 web.config 文件中。
如果我稍后部署了应用程序的新版本,web.config 将被覆盖,最终会出现 404 错误(因为确实没有什么可以理解断言消费者服务 URL
所以如果你的情况是
- 将新应用程序部署到新文件夹(使用问题中链接的“新”web.config)
- 并将您现有的网站指向新文件夹
那么,您部署的网站上很可能会缺少处理程序配置。
我建议再次添加过滤器(使用 ISS UI),并将生成的处理程序配置复制到项目的 web.config(这样您就不会再次丢失它)
IIS、shibboleth 和 Kestrel
这不是对你的问题的直接回答,而是对他们如何互动的快速总结(更大的图景 - 可能有助于进一步排除故障)
与“常规” ASP.NET 应用程序的主要区别在于,IIS 主要是位于 Kestrel 前面的反向代理。
但这实际上并不影响 Shibboleth 流程。我们假设您已配置 shibboleth 来像往常一样保护 www.example.com/ressources(与 asp.net core 无关)
如果你请求 www.example.com/ressources/index.html:shibboleth 会拦截该请求,并触发 IDP 的身份验证流程
稍后当您被重定向回 www.example.com/ressources/index.html 时(经过 IdP 识别并通过您的 shibboleth ACS 进行身份验证后 - 换句话说:这次请求带着有效的 shibboleth 会话 cookie 返回)
- shibboleth 仍然会拦截请求,检查会话是否有效,然后转发给 IIS
- 反过来,IIS 反向代理 Kestrel
- Kestrel 提供请求的资源(假设您的应用程序接受 Shibboleth 在 HTTP 标头中传递的身份)。
答案2
据我所知,.NET Core 与 Shibboleth 配合使用效果不佳,因为它使用 IIS(作为代理)的方式以及没有可用的托管代码。由于 Shibboleth 在 IIS 中作为 ISAPI 过滤器运行,而 .NET Core 应用程序很可能在其自己的 Kestrel Web 服务器中运行,因此这不起作用。找不到资源,因为地址http://.../Shibboleth.sso/login在 Kestrel 上下文中不存在。