我们正在开发一个应用程序,它受到spring安全saml的保护。
身份验证工作正常,但在生产环境中,下面的工作流存在一个问题。
现在,我们在应用程序中得到以下异常:
响应的org.opensaml.common.SAMLException: InResponseToField不对应于发送的消息arGdsZwJtHzTDjQP1oYqbjNO
有什么想法吗?如何处理这个工作流,以便用户在成功登录后可以使用该应用程序?谢谢你的回答!
发布于 2017-11-17 04:54:30
我们通过对spring配置的以下更改解决了问题:
successRedirectHandler
(org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler
)的bean中,我们将defaultTargetUrl设置为应用程序的application (包括所有请求参数)。此url将在IdP启动的单点登录时自动使用。contextProvider
(org.springframework.security.saml.context.SAMLContextProviderLB
)的Bean中,我们将storageFactory设置为org.springframework.security.saml.storage.EmptyStorageFactory
。这将禁用InResponseToField的检查。发布于 2017-07-29 00:07:22
当您鼓掌生成一个AuthnRequest时,请求有一个ID,您的应用程序以某种方式保留了这个ID。来自IdP的相应响应必须将InResponseTo属性设置为相同的ID值,以便应用程序能够验证响应是否针对它发送的请求。
但是,当用户标记包含请求(www.login-server.com/adfs/ls/?SAMLRequest=xxx...),的adfs链接时,您的应用程序已经完全忘记了该请求。换句话说,它不再将请求ID保存在某个地方,也无法验证响应。
解决方案是告诉用户不要将www.login-server.com/adfs/ls/?SAMLRequest=xxx...书签链接。相反,它们必须在应用程序中标记一个链接,在该链接中它可以生成一个新请求并发送到ADFS。
https://stackoverflow.com/questions/45206873
复制相似问题