当使用Spring Security进行BASIC身份验证时,我想匹配密码哈希而不是密码本身。为了存储哈希而不是密码服务器端。
我有以下代码:
@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
AppConfig appConfig;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/v2/**")
.hasAuthority(MY_AUTHORITY).anyRequest().authenticated()
.and()
.httpBasic();
}
@Autowired
public void configureSecurityManager(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
new InMemoryUserDetailsManagerConfigurer<AuthenticationManagerBuilder>()
.withUser(appConfig.getCredentials().getUserName())
.password(appConfig.getCredentials().getPassword())
.authorities(MY_AUTHORITY)
.and()
.configure(authManagerBuilder);
}
}
我发现了一些BCrypt的例子,但是他们正在处理哈希密码而不是将哈希比较合并到BASIC身份验证方案中。
还是我一直弄错了,客户端应该向服务器发送哈希而不是密码?
这里有一个例子:http://www.devglan.com/spring-security/spring-boot-security-password-encoding-bcrypt-encoder
定义密码编码器后,在将来自请求的密码与DB密码进行比较时,spring默认会认为数据库中的密码是bcrypt编码的。
我还向您推荐以下链接:https://security.stackexchange.com/questions/64631/is-it-safe-to-send-clear-usernames-passwords-on-a-https-connection-to-authentica