升级 Spring boot 2.6 -> 2.7 后出现错误 `InResponseTo 属性 [ARQ...] 与身份验证请求 [ARQ...] 的 ID 不匹配

问题描述 投票:0回答:2

背景和问题

我们使用 Spring Boot 2.6,并使用 simpleSamlPhp 1.18.8 作为在 Docker 中运行的本地 idp 服务器,可通过 host.docker.internal 访问我们的测试/开发环境。应用程序本身可以直接在我的笔记本电脑或另一个 Docker 容器中运行(无论哪种方式都会出现问题),并通过 localhost:8080 访问。此设置在 Spring Boot 2.4、2.5、2.6(.15) 上运行良好。但现在我想升级到 2.7,当我尝试登录应用程序时收到标题中的错误。代码中的唯一更改是在 build.gradle 中将 Spring Boot 2.6.15 更改为 2.7.0(或 2.7.14)。恢复到 2.6.15 会使问题再次消失。 我们使用 Gradle 7.4、Jdk 11。所有其他依赖版本均基于 Spring Boot 版本自动管理。

最有趣的是:当登录时显示错误,并且我单击浏览器中的“上一页”按钮时,应用程序会立即成功登录并重定向到应用程序的主屏幕。在此之后一切正常。 如果发生错误时,我返回 localhost:8080 或登录页面,我会再次收到错误。它出现在 Chrome、Firefox、Edge 中。

尝试的解决方案

谷歌搜索错误指向SO和其他地方的文章(例如Spring Saml2和Spring Session - SavedRequest not returned(无法在身份验证/ InResponseTo异常后重定向到请求的页面)),这些文章归咎于CSRF / SameSite设置的问题,但后来我认为这个错误在 Spring Boot 2.6 中也应该发生吗?无论如何,我在上面的 url 上实现了建议的修复(将 SameSite 属性设置为 null 或设置为 none + 设置安全属性),但这并没有解决问题。

https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter讨论了一些已弃用的方法。我已更新代码以删除已弃用的方法/类的使用,但无论是否进行这些更改都会出现问题。

“尝试登录 -> 错误 -> 单击上一个 -> 登录成功”的奇怪循环让我认为这可能与 idp 服务器的原始 URL 和返回 URL 不匹配有关(我认为这就是问题的关键) 'InResponseTo' 属性?)但此时我必须承认我对 saml 的理解太有限,甚至不知道如何或在哪里继续寻找答案。

spring-boot spring-saml simplesamlphp
2个回答
0
投票

我发现将 Spring Security 升级到版本 5.8 可以修复该问题。 只需将

ext['spring-security.version']='5.8.5'
添加到您的 build.gradle 文件即可。

不幸的是,我仍然不知道问题的根本原因,也不知道为什么升级到 5.8 可以修复它。毕竟,Spring Security 5.7 是 Spring Boot 2.7 的默认版本,据我了解,Spring Security 5.8 实际上只是为了让最终升级到 6.0(和 Spring Boot 3.0)更容易而发布的。不过,至少这个问题已经得到解决。


0
投票

我使用的是Springboot 3.0。我有类似的问题。我不知道如何解决这个问题

© www.soinside.com 2019 - 2024. All rights reserved.