带有标准 java 应用程序的 Spring Security SAML
Posted
技术标签:
【中文标题】带有标准 java 应用程序的 Spring Security SAML【英文标题】:Spring Security SAML with standard java application 【发布时间】:2017-04-16 04:26:16 【问题描述】:我们需要在应用程序中为将 ADFS 作为 IDP 的客户启用 SAML 身份验证。
在考虑了各种选项后,我能够使用文档中提供的 Spring SAML 安全性来实现这一点。 现在的问题是将 SAML 安全性与我们的应用程序集成。
不幸的是,我们的应用程序仍然是一个使用 servlet 和 jsp 而不是基于 Spring 的遗留 Java 应用程序。 我只是想知道如何将 2 集成。该文件提到这是可能的。但是,我找不到任何关于它的文章。
有人可以将我引导到可以为这种方法提供指导的相关来源。
谢谢。
【问题讨论】:
【参考方案1】:org.springframework.security.saml.websso
包中的类包含 SAML 处理功能的核心,并且独立于 Spring Security。它们确实包含很少从 Spring 导入的类,因此 Spring-core 类需要在类路径中,但应用程序本身不需要使用 Spring/SpringSecurity。
您将需要重新实现自己的特定于 Spring Security 的逻辑 - 包 org.springframework.security.saml
- 例如SAMLEntryPoint
、SAMLProcessingFilter
,并在您的身份验证生命周期中调用您的实现。这些类的逻辑很简单,因此启用基本用例非常容易。
【讨论】:
感谢弗拉基米尔的指导。我从这种方法开始。我花了一段时间来理解流程,但我正在赶上。目前,我正在从我的 java 应用程序向 /spring-security-saml2/saml/login 发出重定向调用。从 ADFS 成功验证后,我通过在 SamlEntryPoint 中设置 RelayState 属性将用户重定向回我的 java 应用程序。现在我需要在我的 java 应用程序中检索 userClaims。我想知道这里的理想方法应该是什么。【参考方案2】:感谢弗拉基米尔的指导。这就是我如何将标准的遗留 Java 应用程序与 Spring Security 集成以进行基于 saml 的身份验证:
-
修改了 securityContext.xml
设置 idpDiscoveryEnabled=false
设置 forceAuthN= true 以在 saml 令牌过期时强制用户登录
将successHandler中的defaulttargetURL更新为authhandler.jsp页面,出现在spring security应用程序中,以重定向回我的应用程序
我的 java 应用程序中的所有网络调用都应用了过滤器。这
过滤器将调用重定向到 /spring-security-saml2/saml/login
spring saml 使用 ADFS 对用户进行身份验证。身份验证成功后,用户被重定向到 authhandler.jsp
Authhandler.jsp 与 index.jsp 相同,但检索到的声明在此处是隐藏字段。隐藏字段中的这些值将发送回我的标准 java 应用程序。
在这里,我的 java 应用程序执行其他应用程序级别的身份验证并按需要继续。
对于即兴创作或识别上述方法中的任何缺陷的任何建议,我们将不胜感激
【讨论】:
以上是关于带有标准 java 应用程序的 Spring Security SAML的主要内容,如果未能解决你的问题,请参考以下文章