HTTP Server用于高可用性时SAML的行为

Oma*_*zam 4 high-availability saml ibmhttpserver httpserver spring-saml

我已经实现了对SAML SSO的支持,以使我的应用程序充当使用Spring Security SAML Extension的服务提供者.我能够将我的SP与不同的国内流离失所者整合在一起.例如,我有HostA,HostB和HostC,所有这些都有我的应用程序的不同实例.我为每个主机指定了一个SP元数据文件,并使用该主机的URL设置AssertionConsumerServiceURL(EX:https:HostA.com/myapp/saml/sso).我将每个元数据文件添加到IDP并测试了所有这些文件并且工作正常.

但是,我的项目还通过配置IBM HTTP Server以实现负载平衡来支持高可用性.因此,在这种情况下,HTTP Server将主机(A,B,C)配置为用于负载平衡的主机,用户将使用HTTP服务器的URL访问我的应用程序:https:httpserver.com/myapp/

如果我定义了一个SP元数据文件并且具有在AssertionConsumerServiceURL(https://httpserver.com/saml/sso )中指定的HTTP Server的URL 并将我的实现更改为接受针对我的HTTP Server的断言,那么结果会是什么这种情况:

  1. 用户访问将用户分派给HostA的HTTPServer(幕后)
  2. HostA中的我的SP应用程序向IDP发送请求以进行身份​​验证.
  3. IDP将响应发送回我的httpserver:https: //httpserver.com/saml/sso .

HTTP服务器是否会重定向到HostA,如下所示:https: //HostA.com/saml/sso

谢谢.

Vla*_*fer 6

在负载均衡器后面以群集模式部署相同的应用程序实例时,您需要向后端应用程序指示有关HTTP服务器(https://httpserver.com/myapp/)上的公共URL的信息.您可以使用SAMLContextProviderLB(请参阅手册中的更多内容)执行此操作.但是你似乎已经成功完成了这一步.

一旦您的HTTP服务器收到请求,它就会将其转发到您的主机之一,例如https://HostA.com/saml/sso,并且通常还会将原始URL作为HTTP标头提供.这SAMLContextProviderLB将使SP应用程序认为真正的URL是https://httpserver.com/saml/sso,这将使其通过与目标URL相关的所有SAML安全检查.

由于后端应用程序在其HttpSessions中存储状态,请确保执行以下操作之一:

  • 在HTTP服务器上启用粘性会话(以便相关请求始终指向同一服务器
  • 确保在群集中复制HTTP会话
  • 通过EmptyStorageFactory在Spring配置中包含bean 来禁用对响应ID的检查(此选项也使Single Logout不可用)