另一种无需PasswordEncoder验证用户身份的方法(在Spring boot中)

问题描述 投票:0回答:1
import statements;

@Configuration
public class AppSecurity {

    @Autowired
    private DataSource dataSource;

    @Bean
    public UserDetailsService userDetailsService() {
        JdbcUserDetailsManager userDetailsManager = new JdbcUserDetailsManager(dataSource);
        userDetailsManager.setUsersByUsernameQuery("SELECT mobile, pin, 1 AS enabled FROM users WHERE mobile = ?");
        userDetailsManager.setAuthoritiesByUsernameQuery("SELECT mobile, 'ROLE_USER' FROM users WHERE mobile = ?");
        return userDetailsManager;
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }

    @Bean
    public SecurityFilterChain filter(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(configure ->
                    configure.requestMatchers(HttpMethod.POST, "/api/**")
                            .hasRole("USER")
                            .requestMatchers(HttpMethod.GET, "/api/**")
                            .hasRole("USER")
                );


        http.httpBasic(Customizer.withDefaults());

        return http.build();
    }
}

这是我的配置类

此配置类允许用户使用其 mobileno 和 pin 登录。 我将密码存储为纯文本(noop)。 我将密码存储在没有加密 ID 的数据库中(例如:{noop}、{bcrypt} ...)

但是

@Bean
public PasswordEncoder passwordEncoder() {
    return NoOpPasswordEncoder.getInstance();
} 

Intellij 显示 NoOpPasswordEncoder 已弃用 还有其他方法可以实现身份验证吗

注意:我存储的密码没有加密 ID,即。 “0000”不是“{noop}0000”

java
1个回答
0
投票

永远不要以纯文本形式存储密码...来自 NoOpPasswordEncoder 的文档:

此密码编码器不安全。请改用自适应单向函数,例如 BCryptPasswordEncoder、Pbkdf2PasswordEncoder 或 SCryptPasswordEncoder。更好的是使用支持密码升级的 DelegatingPasswordEncoder。目前还没有计划取消这种支持。不推荐使用它来表明这是一个遗留实现,并且使用它被认为是不安全的。

如果你想摆脱警告,你总是可以自己制作 no op 实现,但这将是规避问题,而不是解决问题。按照文档中的建议,使用 DelegatingPasswordEncoder 来代替。

  1. 在数据库中运行查询以在每个密码之前添加
    {noop}
    前缀,或配置委托编码器以考虑无操作的缺失前缀 - 请参阅 setDefaultPasswordEncoderForMatches()
  2. 开始对新注册的密码进行编码,并强制现有用户更改其密码(例如登录时) - 当然,您必须对新密码进行编码。
© www.soinside.com 2019 - 2024. All rights reserved.