如何将 OIDC 与基于 JSP + Spring MVC 的应用程序一起使用

How to use OIDC with a JSP + Spring MVC based application

我们有一堆应用程序,我们在这些应用程序上使用 SAML 和 Keycloak 作为我们的身份提供者。此设置帮助我们在 15 个奇数应用程序中实现 SSO。几乎所有这些应用程序都是 JSP+Spring WebFlow + Spring MVC,所以我们使用 SAML,而您的应用程序之一是 Angular+REST,所以我们使用 OIDC 和 Keycloak。

无论协议和技术如何,我们都能够在这些应用程序之间实现无缝 SSO,因为我们的身份提供者是相同的。

今天我们得到了一个新的更新,为了推动我们的应用程序现代化,我们必须将我们的 JWT 令牌传递给我们正在使用的所有关键内部后端服务,因为这样我们的后端调用也可以自己执行授权和认证。

对于我使用 OIDC 的应用程序,我始终可以传递 JWT,因为一旦用户登录,我就始终拥有它。但是对于启用 SAML 的应用程序,我目前还没有。

在这里我可以想到一个解决方案,即将所有 14 个应用程序从 SAML 迁移到 OIDC,但由于应用程序是 JSP+Spring Web FLow + Spring 基于 MVC 我我不确定这是否可能。即使可能,我认为迁移所有应用程序的开销也很大,因为这需要对任何回归进行足够的测试。

如果您认为 OIDC 可以与基于 JSP 和 Spring MVC/WebFlow 的应用程序一起使用,那么您能否分享更多关于它的见解,因为在 OIDC 中,所有会话管理都在客户端,但在 Spring MVC/WebFlow 的情况下,所有会话都在服务器端维护。

这里有人可以建议我一些更好的方法吗?无法摆脱将 JWT 传递给后端调用的要求,所以我真的需要一些东西。

我不确定您是否可以某种方式将这两种协议集成到一个服务中,但从我的角度来看,绝对是迁移到 OIDC 的方式。

在 Keycloak 端,应该只需要将客户端类型从 SAML 更改为 OIDC。在您的应用程序中,您可能需要进行更多配置,但如果您使用的是 Spring Security SAML Extension it shouldn't be that difficult, as you could migrate to the Keycloak Adapter,它也在 Spring 安全性的顶部工作。

您显然不需要一次迁移所有应用程序,因为您可以同时保持不同客户端类型的兼容性。