【发布时间】:2019-07-30 20:12:16
【问题描述】:
到目前为止,我将用户名和加密密码存储在数据库中。
我的自定义UserDetailsService 从数据库中查找用户。密码是加密存储的,因此在这里应用BCryptPasswordEncoder。
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
}
问题:我现在必须添加一个额外的身份验证源,它提供未加密密码(我无法控制)。因此,如果在我的数据库中找不到经过身份验证的用户,我想使用未加密的密码检查其他源。但是对于这些情况,我该如何禁用BCrypt 编码器?
【问题讨论】:
-
我现在不在我的开发机器上,但我相信有一个专门针对这个用例的复合密码编码器(在线迁移)。您可以通过前缀识别 Bcrypt 密码。
-
@chrylis 所以我必须在数据库中的所有编码密码前面加上
{bcrypt},对吗?然后只依赖弹簧默认值? -
Bcrypt 密码已经以
$2a$为前缀。 -
我通过不设置自己的密码编码器进行了尝试,因此加载了默认的
DelegatingPasswordEncoder:以{bcrypt}为前缀可以工作并委托给 brcypt 编码器。仅仅使用以$2a$开头的纯编码密码是行不通的!我可能做错了什么? -
我很惊讶,不太确定发生了什么,但如果它对你有用,那就太好了!
标签: java spring spring-security