【问题标题】:Multiple WebSeciurityConfig in one Spring application一个 Spring 应用程序中的多个 WebSeciurityConfig
【发布时间】:2018-01-17 03:56:42
【问题描述】:

从安全角度来看,我们正在维护我们应用程序的两个版本

1. SAML based spring security 
2. Spring and JDBC based application security.

由于我们的一些客户已经拥有 SAML IDP(如 ADFS 和 GLUU),他们希望我们为 SSO 集成它们,而一些客户没有 SAML IDP。

有没有一种方法可以使两种配置共存,并根据使用应用程序的客户,将安全性强加给用户。

例如:如果请求来自客户a.myserverhost.com,则强制实施基于 SAML 的安全配置。如果请求是来自 b.myserverhost.com 的请求,则强制执行另一个 webSeciurityConfig

【问题讨论】:

    标签: java spring-boot spring-security spring-saml


    【解决方案1】:

    是的,这一切皆有可能。我的建议是实现您自己的 AuthenticationManager,它管理多个 AuthenticationProviders(例如 SAML、JDBC)。

    您可以在此处插入条件逻辑,以根据特定标准选择正确的提供者。

    要获得灵感,请查看默认实现 ProviderManager

    ProviderManager 开箱即用,将遍历您的所有 AuthenticationProvider 并尝试对用户进行身份验证。如果它没有找到用户,它会移动到下一个。如果这就是您所需要的,那么您不需要任何自定义实现。

    【讨论】:

    • 感谢您的回答,它帮助我找到了灵感,将尝试实施。我相信在检查 URL 后,我会使用“auth.authenticationProvider(samlAuthenticationProvider());”调用正确的身份验证提供程序。在 websecurityconfig 的配置方法中
    • 该方法是 AuthenticationManagerBuilder 的一部分,是您注册 AuthenticationProviders 的地方。这不是您定义条件逻辑的地方。您需要通过两次调用相同的方法,authenticationProvider(saml()) 和 authenticationProvider(jdbc()) 来注册这两个提供程序。然后在您的 CustomAuthenticationManager 中实现 authenticate() 方法,这就是您定义条件逻辑的地方。就像我之前提到的,默认实现,ProviderManager 会遍历每个 AuthenticationProvider 直到返回一个成功的 Authentication
    • ^ 如果这对您的用例来说足够了,那么您根本不需要为自定义实现而烦恼。
    猜你喜欢
    • 2016-05-25
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多