Spring 带有标准 java 应用程序的安全 SAML

Spring Security SAML with standard java application

我们有一个要求,需要在我们的应用程序中为将 ADFS 作为 IDP 的客户启用 SAML 身份验证。

在考虑了各种选项之后,我能够按照文档中提供的 Spring SAML 安全性来使用它。 现在的问题是将 SAML 安全性与我们的应用程序集成。

不幸的是,我们的应用程序仍然是使用 servlet 和 jsp 而不是 spring 的遗留 java 应用程序。 我只是想知道如何将2整合起来。文档中提到这是可能的。但是,我找不到任何关于它的文章。

谁能告诉我可以为这种方法提供指导的相关资源。

谢谢。

org.springframework.security.saml.websso 中的

类 包含 SAML 处理功能的核心,并且独立于 Spring 安全性。它们确实包含少量来自 Spring 的 class 导入,因此 Spring-core classes 需要位于 class 路径上,但应用程序本身并不不需要使用 Spring/SpringSecurity.

您需要自己重新实现特定于 Spring 安全性的逻辑 - 程序包 org.springframework.security.saml - 例如SAMLEntryPointSAMLProcessingFilter,并在身份验证生命周期内调用您的实现。这些 classes 的逻辑很简单,因此启用基本用例非常容易。

感谢 Vladimír 的指导。这就是我如何将标准遗留 java 应用程序与 spring 安全性集成以进行基于 saml 的身份验证:

  1. 已修改 securityContext.xml
    设置 idpDiscoveryEnabled=false
    设置 forceAuthN= true 以在 saml 令牌过期时强制用户登录
    将 successHandler 中的 defaulttargetURL 更新为 authhandler.jsp 页面,出现在 spring 安全应用程序中,重定向回我的应用程序
  2. 我在我的 java 应用程序中对所有网络调用应用了过滤器。这个 过滤器将调用重定向到 /spring-security-saml2/saml/login
  3. spring saml 验证用户 ADFS.On 成功验证,用户被重定向到 authhandler.jsp
  4. Authhandler.jsp 与 index.jsp 相同,但检索到的声明在这里是隐藏字段。隐藏字段中的这些值被发送回我的标准 java 应用程序。
  5. 这里我的 java 应用程序执行其他应用程序级别的身份验证并按需要进行。

对于即兴创作或识别上述方法中的任何缺陷的任何建议,我们将不胜感激