我正在使用Spring Security SAML让我的应用程序充当SP。我能够完成端到端的解决方案。但是,当用户想要使用多个URL访问应用程序时,我遇到了问题。我已使用Assertion Consumer Service URL将我的SP元数据配置为 mywebsite:8080 / myapp / saml / SSO。
用户还可以通过完整的域名访问该应用程序 的 mywebsite.fulldomainname:8080 / MyApp的/
如果用户访问第二个URL,SP应用程序将重定向到IDP,IDP将返回第一个URL,该URL将无法提供此消息: 响应的InResponseToField与发送的消息
不对应即使我使用了EmptyStorageFactory,它仍然会在AbstractProfileBase.verifyEndpoint中失败
我该如何解决?
答案 0 :(得分:1)
SAML的安全模型的一部分是验证目标端点 - 其中IDP想要传递SAML消息 - 以及SP实际收到消息的端点 - 两者需要匹配。因此,您的SP元数据需要包含有关其希望传递SAML消息的URL的正确信息。如果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中找到更多详情。