【发布时间】:2017-10-01 01:19:58
【问题描述】:
我已经使用 Spring Boot 实现了 OAuth 2.0。我将散列密码(包括盐)存储到我的数据库中。
我是 Spring 新手,不知道如何验证用户名/密码。
这是我的 UserDAO 类:
@Service
public class UserDAO implements UserDetailsService{
@Autowired
private LoginDetailsManager loginDetailsManager;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
System.out.println("Get user");
LoginDetails user = loginDetailsManager.getByUsername(username);
System.out.println(user.toString());
if (user == null) {
// Not found...
throw new UsernameNotFoundException(
"User " + username + " not found.");
}
GrantedAuthority grantedAuthority = new SimpleGrantedAuthority("ROLE_USER");
List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
grantedAuthorities.add(grantedAuthority);
String password = user.getPasswordHash();
String salt = user.getSalt();
return new UserDetailsImpl(
user.getUsername(),
user.getPasswordHash(),
salt,
grantedAuthorities);
}
}
这是来自 Application 类的安全配置器:
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.allowFormAuthenticationForClients();
}
问题:
- 如何找回用户输入的密码? UserDetailsService 的实现给了我用户输入的用户名。
- 是否有处理这种“散列密码+盐”身份验证的内置方法?我错了吗?
【问题讨论】:
-
我明白了。但是盐呢?我不需要将盐从数据库传递给spring ..吗?该数据库当前是手动填充的。另外,spring怎么知道我使用的是哪种哈希算法?
-
你可以定义
saltSource或者实现自己的passwordEncoder -
@Downvoter,请对改进发表评论!
标签: java spring authentication spring-boot oauth-2.0