【问题标题】:Multiple authorization prompts in a single Spring app单个 Spring 应用程序中的多个授权提示
【发布时间】:2018-02-21 23:38:13
【问题描述】:

我的问题主要围绕是否有可能在 Spring 应用程序中向同一用户提供两个具有不同身份验证来源的登录表单。

我希望根据选择的配置文件将不同的安全配置类(或same class with static inner config classes)添加到我的 Maven 构建中:UATProduction。或者通过部署环境来控制它(参见下面的框架)。

任何一种情况,应用程序都应该有自己的“特权”访问(如管理页面)的身份验证提示,我希望看到应用程序的登录页面。

但是,对于 UAT 配置文件,我希望在任何用户查看任何页面之前看到一个额外的登录页面,以及用于管理功能的登录页面(如果这些受保护页面)被访问。

这个想法是在 UAT 中显示应用程序,就像它在 生产 中操作一样,但不允许任何用户在没有先通过单独登录进行身份验证的情况下查看任何页面表格。

我愿意研究任何个想法,但我的理想情况是允许使用不同的 Spring Security 配置集。


我尝试过/考虑过的事情

动态过滤器 通过注册一个动态过滤器来实现这个想法,我很幸运地实现了这个想法,该过滤器捕获了任何请求并转发到一个 servlet,其唯一目的是处理显示不同的登录页面和处理外部身份验证(所有打包在构建时包含的 jar 中)对于 UAT),但那不是 Spring 应用程序,我相信调度 servlet 会否定这种方法。

框架(应用程序接收) 我考虑过在具有自己的安全性的外部“UAT Viewer”应用程序的框架内显示应用程序的想法,理论上可以分割 Spring Security 问题。但我不知道这是否会为外部和内部应用程序创建不同的 cookie(出于安全原因,我很少考虑框架)。理想情况下,我想拒绝 x-frame-options 标头中的所有框架以帮助防止点击劫持,但如果这种方法可行,我只需将框架策略更改为同源即可。

我想我会先尝试框架方法并反馈。

考虑到这一点,将在框架中呈现的内部应用程序仍然必须可供外部世界访问,以便客户端可以加载它,因此这种方法违背了隔离内部应用程序而对它的代码。

【问题讨论】:

    标签: spring spring-mvc spring-security uat


    【解决方案1】:

    解决方案是添加对单独项目(在 Maven 中具有“UAT”配置文件)的依赖项,该项目提供过滤器和 Servlet,可以中断和处理 Spring Security 正常流程之外的身份验证。

    这种方法的问题是spring security的过滤器会先拦截请求,如果页面需要认证,会尝试重定向到指定的登录页面(或默认)。解决这个问题的方法是添加一个禁用弹簧安全性的路径,因此请求将绕过这些过滤器并由自定义添加的过滤器处理,如下所示:

    @Override
    public void configure(WebSecurity web) throws Exception {
    
        // Disabling security for the login-aspect addon. Will emit 404 in
        // production operation where login-aspect.jar is no added.
        web.ignoring().antMatchers("/uat-login");
    }
    

    通过这种方式,我可以有一个过滤器,它将对应用程序的任何请求重定向到首先映射到“/uat-login”并显示身份验证提示的外部身份验证 servlet。

    对此的另一个好处 (IMO) 是,如果触发了应用程序的注销功能并删除了会话 cookie,那么它也会有效地注销外部安全性。

    这可能不是最佳方法,但很有效 当然欢迎提出改进建议。我想我稍后会在 Github 项目中发布用于执行此操作的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      相关资源
      最近更新 更多