【问题标题】:Spring Security - Get clear password on authentication and re-encrypt them [duplicate]Spring Security - 在身份验证时获取明确的密码并重新加密它们[重复]
【发布时间】:2018-04-21 08:24:19
【问题描述】:

我有一个包含 MD5(旧资料)和 BCrypt 密码的用户表。我想将 MD5 密码迁移到 BCrypt,而不是暴力破解它们。我考虑过在成功验证时重新加密密码。

但是(到目前为止,在我的调查中),如果我在 authentication-manager 声明中禁用 erase-credentials,我只能(从登录页面)获得明确的密码。在这种情况下,我不仅可以从我的自定义 AuthenticationSuccessHandler 访问凭据信息,还可以从我的应用程序中的任何位置访问凭据信息(使用 SecurityContextHolder.getContext().getAuthentication() )。

有没有办法仅在成功验证时访问明文密码?或者您是否知道一种无需用户操作(更改密码等)即可重新加密密码的更好方法?

谢谢

【问题讨论】:

    标签: java spring encryption spring-security


    【解决方案1】:

    一种解决方案是创建一个密码编码器,它同时接受旧版 MD5 哈希和来自新的、更好的 (BCrypt) 编码器的值,并在找到一个时迁移 MD5 哈希。

    @Component
    public class MigratingPasswordEncoder implements PasswordEncoder {
    
        @Autowired
        private org.springframework.security.crypto.password.PasswordEncoder passwordEncoder; // new encoder (BCrypt)
    
        @Autowired
        private Md5PasswordEncoder legacyEncoder;
    
        @Autowired
        private UserDao userDao; // where password hashes are stored
    
        public String encodePassword(String rawPass, Object salt) {
            return passwordEncoder.encode(rawPass);
        }
    
        public boolean isPasswordValid(String encPass, String rawPass, Object salt) {
            if (legacyEncoder.isPasswordValid(encPass, rawPass, salt)) {
                // MD5 hash found here, save a new hash instead
                userDao.updatePassword(encPass, passwordEncoder.encode(rawPass));
                return true;
            }
            return passwordEncoder.matches(rawPass, encPass);
        }
    }
    

    弃用说明:这使用了org.springframework.security.authentication.encoding 包中的旧PasswordEncoder 接口,但这是不可避免的,因为Md5PasswordEncoder 也使用该接口。

    致谢:灵感来自Spring security 3.1.4 and ShaPasswordEncoder deprecation 的回答。

    【讨论】:

      猜你喜欢
      • 2016-08-27
      • 2021-05-13
      • 2011-12-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 2014-03-26
      相关资源
      最近更新 更多