【问题标题】:Spring Security SAML with standard java application带有标准 java 应用程序的 Spring Security SAML
【发布时间】:2017-04-16 04:26:16
【问题描述】:

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

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

不幸的是,我们的应用程序仍然是一个使用 servlet 和 jsp 而不是基于 Spring 的遗留 Java 应用程序。 我只是想知道如何将 2 集成。该文件提到这是可能的。但是,我找不到任何关于它的文章。

有人可以将我引导到可以为这种方法提供指导的相关来源。

谢谢。

【问题讨论】:

    标签: java spring-security adfs spring-saml


    【解决方案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 的身份验证:

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 2016-12-05
      • 2016-12-26
      • 2018-02-26
      • 2017-04-06
      • 2013-03-02
      • 2014-07-18
      • 2016-08-26
      • 1970-01-01
      相关资源
      最近更新 更多