带有标准 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 - 例如SAMLEntryPointSAMLProcessingFilter,并在您的身份验证生命周期中调用您的实现。这些类的逻辑很简单,因此启用基本用例非常容易。

【讨论】:

感谢弗拉基米尔的指导。我从这种方法开始。我花了一段时间来理解流程,但我正在赶上。目前,我正在从我的 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的主要内容,如果未能解决你的问题,请参考以下文章

Java SE + Spring Data + Hibernate

jboss spring boot

spring学习笔记 Spring概述

Java SE ,Java EE和Java ME 的区别

Java版本

java简介