SP 可以通过多个 URL 访问,如何让所有 URL 与 IDP 一起使用

SP can be accessed by a number of URLs, how to have all the URLs work with an IDP

我正在使用 Spring 安全 SAML 让我的应用程序充当 SP。我能够完成端到端的解决方案。但是,当用户想要使用多个 URL 访问应用程序时,我遇到了一个问题。我已经将断言消费者服务 URL 的 SP 元数据配置为 mywebsite:8080/myapp/saml/SSO.

用户也可以通过全域名访问应用 mywebsite.fulldomainname:8080/myapp/

如果用户访问第二个 URL,SP 应用程序将重定向到 IDP,该 IDP 将 return 第一个 URL 将无法给出此消息: 响应的 InResponseToField 与发送的消息不对应

即使我使用了 EmptyStorageFactory,它仍然会在 AbstractProfileBase.verifyEndpoint

中失败

我该如何解决?

SAML 安全模型的一部分是验证预期端点(IDP 想要传递 SAML 消息的位置)和 SP 实际接收消息的端点——两者需要匹配。因此,您的 SP 元数据需要包含有关 URL 的正确信息,它希望将 SAML 消息传递到哪里。如果 SP 元数据 URL 与您的 IDP 传递消息的位置不同,您将在 verifyEndpoint 中遇到错误。

Spring SAML 允许您为同一部署定义多个不同的元数据(具有不同的 URL)。因此,您可以通过为 mywebsite:8080/myapp 生成一个元数据、为 mywebsite.fulldomainname:8080/myapp/ 生成另一个元数据并将两者导入您的配置来解决您的问题。其中每一个都必须有不同的 entityId,并且还需要单独导入到您的 IDP。

您可以在 chapter 7.2 of the Spring SAML manual - pre-configured metadata 中找到更多详细信息。