春季-SAMLException:响应的InResponseToField与发送的消息不对应

我们正在开发一个受Spring Security SAML保护的应用程序.

身份验证工作正常,但是生产环境中的以下工作流程存在一个问题.

>用户请求不受保护的地址www.server.com
>响应是一个带有嵌入式脚本的html页面,该脚本将window.location.href更改为受saml保护的页面(服务提供商)www.server.com/app/action?param1=value1\u0026amp;param2=value2
> spring saml检测到需要认证,并将用户重定向到www.login-server.com上的登录表单(身份提供者)
>此时,登录表单是显示给用户的第一页
>用户将此登录页面添加为书签(包括此http会话的与saml相关的url参数)www.login-server.com/adfs/ls/?SAMLRequest=xxx\u0026amp;SigAlg=xxx\u0026amp;Signature=arGdsZwJtHzTDjQP1oYqbjNO
>用户使用该应用程序…
>用户第二天打开此书签并登录
> IdP重定向到SP,但是所属的HTTP会话已经过期

现在,我们的应用程序中出现以下异常:

org.opensaml.common.SAMLException:响应的InResponseToField与发送的消息arGdsZwJtHzTDjQP1oYqbjNO不对应

有什么想法如何处理此工作流程,以便用户成功登录后可以使用该应用程序吗?
感谢您的回答!

解决方法:

当您应用生成AuthnRequest时,该请求具有您的应用以某种方式保留的ID.来自IdP的相应响应必须将InResponseTo属性设置为相同的ID值,以便您的应用程序可以验证该响应是否是针对它发送的请求的.

但是,当用户为包含请求的adfs链接添加了书签(www.login-server.com/adfs/ls/?SAMLRequest=xxx …)时,您的应用程序完全忘记了该请求.换句话说,它不再将请求ID保留在某个位置,并且无法验证响应.

解决方案是告诉您的用户不要为www.login-server.com/adfs/ls/?SAMLRequest=xxx …链接添加书签.相反,他们必须在您的应用程序中为该链接添加书签,该链接可以在其中生成新请求并发送到ADFS.

上一篇:java-名称和FriendlyName之间有什么区别?


下一篇:Salesforce 集成篇零基础学习(一)Connected App