Spring security Shibboleth SSO和Spring SP:由于“无法登录”;InResponseToField“;失配误差

Spring security Shibboleth SSO和Spring SP:由于“无法登录”;InResponseToField“;失配误差,spring-security,single-sign-on,saml-2.0,spring-saml,shibboleth,Spring Security,Single Sign On,Saml 2.0,Spring Saml,Shibboleth,在我的生产设置中,负载平衡器后面有两个服务提供商和两个IdP实例,我在一个SP的日志中看到以下错误,我不确定原因: 响应的InResponseToField与发送的消息不对应 我使用的是Shibboleth 3,SpringSecurity3.1.2版本的服务提供商,SpringSecuritySAML1.0.0 我无法在生产环境中始终如一地重现此错误,因为它可能发生在用户单击链接并需要重新验证时,也可能发生在用户登录屏幕上时 到目前为止,我能够始终如一地复制的方法是在登录屏幕上点击submit

在我的生产设置中,负载平衡器后面有两个服务提供商和两个IdP实例,我在一个SP的日志中看到以下错误,我不确定原因:

响应的InResponseToField与发送的消息不对应

我使用的是Shibboleth 3,SpringSecurity3.1.2版本的服务提供商,SpringSecuritySAML1.0.0

我无法在生产环境中始终如一地重现此错误,因为它可能发生在用户单击链接并需要重新验证时,也可能发生在用户登录屏幕上时

到目前为止,我能够始终如一地复制的方法是在登录屏幕上点击submit之前删除服务提供商的JSESSIONID(例如,通过进入Chrome控制台并将其从cookie列表中删除)

以下是生产中发生此错误时其中一个SP的日志片段-服务提供商在身份验证后创建不同的
JSessionID
,类似于我上面描述的设置:

2018-03-05 06:33:38 DEBUG HttpSessionStorage:93 - Storing message a7a636i3hee345244e5j390hia90fg to session BC1B9DEC1CF797AA99FF3F8B4431D301

   2018-03-05 06:34:42 DEBUG HttpSessionStorage:117 - Message a7a636i3hee345244e5j390hia90fg not found in session FE9D2450284C49549E7AC212F1271045

   org.opensaml.common.SAMLException: InResponseToField of the Response doesn't correspond to sent message a7a636i3hee345244e5j390hia90fg
           at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:139)
安全问题的可能解决方案

一种可能的解决方案是禁用服务提供商上的某些请求验证检查

这建议对
SAML
存储使用
EmptyStorageFactory
策略,并在
savedRequestStataWareAuthenticationSuccessHandler
bean中使用
defaultTargetURL


这提到了存在重播攻击可能性的此解决方案的安全风险。我们的SPs和IDP仅使用HTTPS,因此这可能会得到缓解-是否存在其他可能引入的漏洞?

这可能是您的负载平衡器配置存在问题。在您的用例中,在负载平衡器中配置粘性会话非常重要。考虑一个场景,当SP1发出认证请求时,您的LB将响应重定向到SP2,在这种情况下,SP2将抛出您正在接收的错误。如果你的LB将响应重定向到SP1,那么登录可以正常工作。这可能是一种随机情况,这就是为什么您不能始终如一地重现此错误。尝试在LB中配置粘性会话。如果有帮助,请告诉我。

安装程序有一个负载平衡器,粘性会话为3小时。此外,SP会话仅限于一个SP,因为我只能看到为该SP生成的日志。