【问题标题】:Spring Security Basic Auth with digest over http for stateless APIsSpring Security Basic Auth with digest over http for stateless APIs
【发布时间】:2020-08-09 10:39:47
【问题描述】:

一些客户/客户会通过用户管理系统将网络应用程序用于离线大规模用途。在这方面,它们为部署具有 HTTPS 支持的应用程序提供了真正的痛苦。让客户抱怨的浏览器对自签名证书发出的 UN-trust 警告别管了。

  • 在这个用例中,为了争论。通过 HTTP 使用安全用户身份验证的选项有哪些?

我一直在尝试使用 Spring Security 和 Spring Boot 来使用基本身份验证保护无状态 API,但我想控制 base64 标头加密/解密,避免以非常容易解密的 base64 字符串发送凭据。

@Override
    protected void configure(HttpSecurity http) throws Exception {
      http.csrf()
          .disable()
          .cors()
          .and()
          .authorizeRequests()
          .antMatchers("/login")
          .permitAll()
          .and()
          .httpBasic();
    }

此方法配置扩展WebSecurityConfigurerAdapter。我试图查看BasicAuthenticationFilter 的源代码,发现它使用BasicAuthenticationConverter 创建新对象,所以我无法提供自定义转换器作为bean 来控制base64 解密与更强大的替代(或额外一)。

这也违反了基本身份验证标准。 Digest Auth 将密码存储为文本,这对我来说不是一个选项。

所以,

  • 有没有办法使用带有 HTTP 的 Basic Auth 来控制 base64 解密,试图达到 HTTPS 提供的功能?

  • 或者使用 Digest Auth 和加密的存储密码?

【问题讨论】:

    标签: java spring-boot spring-security basic-authentication digest-authentication


    【解决方案1】:

    除了使用 HTTPs 之外别无选择,但要回答您的问题,是的,您可以自行控制发送加密数据并创建一个 servlet 过滤器,以便在每个请求或敏感请求上解密发送的数据。

    【讨论】:

      【解决方案2】:

      有没有办法使用带有 HTTP 的 Basic Auth 来控制 base64 解密,试图达到 HTTPS 提供的功能?

      是的。这里以基本认证为例进行扩展。您需要根据您的请求创建过滤器,以使用标题中的base64 编码执行任何您想做的事情。您可以在编码为 base64 之前加密包含 username:password 值的 Authorizaion 标头。

      用户名:密码>>加密>>编码为base64

      然后在该过滤器中,您进行解密并重新创建 base64 纯格式

      请求头授权加密>>从base64解码>>解密>>将用户名:密码编码为base64>>继续过滤链到BasicAuthenticationFilter

      你可以在 BasicAuthenticationFilter 之前添加过滤器

      http.addFilterBefore(tokenFilter(), BasicAuthenticationFilter.class);
      

      请注意,这是扩展基本身份验证的自定义解决方法,但它不是处理基本身份验证的标准方法。

      或者使用 Digest Auth 和加密的存储密码?

      Digest Auth 通过 HTTP 没有那么安全,但为了更好地了解它的工作原理,您可以看看这个答案

      Concept of Digest authentication - does it really work?

      使用第一个选项比使用第二个选项更安全。但最好的解决方案是使用 HTTPs。安全性是主要问题和主题,您应该花一些时间尝试找出最适合您的情况的方法。

      【讨论】:

        猜你喜欢
        • 2014-06-08
        • 2017-05-13
        • 2014-01-29
        • 2017-03-09
        • 2020-06-21
        • 2015-03-02
        • 2015-09-17
        • 2015-03-10
        • 2011-06-02
        相关资源
        最近更新 更多