Spring boot + Spring SAML不适用于NGINX proxy_pass

时间:2016-12-07 19:29:00

标签: spring-boot spring-saml

我有一个结构,我的休息服务(SP)是使用Spring boot + Spring SAML进行身份验证和使用Nginx作为反向代理的UI构建的。 如果通过直接URL返回/重写来调用服务,一切正常:调用IDP进行身份验证并返回响应。 但是,如果我使用proxy_pass调用相同的服务,则响应的InResponseToField失败并且对应于已发送的消息

我有使用NGINX作为Web服务器的UI和通过NGINX调用SP的结构。 SP在LB下有多个实例。使用SAMLContextProviderLB作为上下文提供程序。

如何使用Nginx进行此调用。

1 个答案:

答案 0 :(得分:1)

我怀疑您的Nginx未配置为使用粘性会话。这导致来自IDP的响应可以落在服务器上,该服务器不知道最初从其他服务器发送的请求,因此无法验证它。 Spring SAML手册说:

  

确保将反向代理或负载均衡器配置为   使用粘性会话。

有多种可能的解决方案:

  • 在Nginx上启用粘性会话,因此响应将发送到发送它的同一服务器
  • 禁用InResponseTo字段的验证(有关详细信息,请参阅manual
  • 启用HTTP会话复制,因此包含已发送请求的HttpSession将分发到所有服务器 - 为此,请参阅例如spring-session