我目前正在配置 Spring Security SAML 扩展(我是一个想要与多个身份提供者集成的服务提供者)。
我注意到奇怪的行为。当一切配置正确时,联合登录就可以正常工作,并且一切都很完美。但是,当 SAMLResponse 解析出现问题时,我的应用程序会进入重试循环(我没有在任何地方配置)。在数百次失败的重试尝试后,它会向用户返回 500。这会将大量无用的堆栈跟踪转储到我的日志中。
第一个 SAMLResponse 解析错误消息包含一个实际的根本原因。所有其他人都有相同的信息:SAMLResponse 中的 InResponseToField 与 AuthnRequest 中的请求 ID 不匹配。但这很奇怪,因为在我的浏览器中我只看到一个请求和一个响应(在所有重试完成后出现,我收到 500)。并且 id 在这两个请求中匹配。
第一次失败:
{"@timestamp":"2019-05-10T13:20:17.628+0300","level":"INFO","thread":"http-nio-8000-exec-2","logger":"org.springframework.security.saml.log.SAMLDefaultLogger","message":"AuthNResponse;FAILURE;0:0:0:0:0:0:0:1;org:patkovskyi:test;http://www.okta.com/exkm1jqgci0YsCUgy0x7;;;org.opensaml.common.SAMLException: Response doesn't have any valid assertion which would pass subject validation\n\tat org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:229)}
重试:
{"@timestamp":"2019-05-10T13:20:17.630+0300","level":"INFO","thread":"http-nio-8000-exec-2","logger":"org.springframework.security.saml.log.SAMLDefaultLogger","message":"AuthNResponse;FAILURE;0:0:0:0:0:0:0:1;org:patkovskyi:test;http://www.okta.com/exkm1jqgci0YsCUgy0x7;;;org.opensaml.common.SAMLException: InResponseToField of the Response doesn't correspond to sent message a1cj420hf746f14746d8c2gb014a588\n\tat org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:139)}
有没有人见过类似的问题?Spring Security SAML 中是否有一些隐藏的重试机制?