2014-11-04 5 views
1

bcrypt 및 스프링 보안을 사용하여 & 소금 사용자 암호를 해시하고 싶습니다.스프링 보안이 적용된 사용자 지정 암호 소금

다음
public class User { 
    private Integer id; 
    private String email; 
    private String hashedPassword; 
    private String salt; //I want to use this salt. 
    private Boolean enabled; 

    //Getters & Setters 
} 

내가 자신의 소금으로 새 사용자를 만드는 방법은 다음과 같습니다 :

@Transactional 
public User create(String email, String password) { 
    User user = new User(); 
    user.setSalt(BCrypt.gensalt(12)); //Generate salt 
    user.setEnabled(true); 
    user.setEmail(email); 
    user.setHashedPassword(BCrypt.hashpw(password, user.getSalt())); 
    return dao.persist(user); 
} 

을 그리고 여기에 봄의 구성입니다 :

여기

내 사용자 모델 (I 쓸모없는 코드를 제거)입니다

이 구성에서 나는 PasswordEncoder이를 사용해야 함을 나타냅니다.;

문제 : 암호 모듈되는 PasswordEncoder와 함께 사용하면

소금 값이 null이어야합니다 : 나는 오류 500 다음 얻는다.

BCoverPasswordEncoder가 자체 SaltSource를 사용하기 때문에 salt가 null이어야합니다.

  1. SaltSource를 사용하는 방법이 있나요? 또는
  2. 신뢰할 수있는 알고리즘 중 어느 것이 내 SaltSource을 허용합니까?

감사합니다. 첫 번째 질문에

+0

소금원을 사용하고 싶다면 특별한 이유가 있습니까? – holmis83

+0

@ holmis83'BCryptPasswordEncoder'는 모든 사용자에게 어떻게 다른 소금을 사용하고 싶은지 모르겠지만 여러 서버에서 같은 방식으로 소금물을 붙이고 확인하고 싶습니다. –

답변

0

답변 :

BCryptPasswordEncoder이 hardcoded 소금 소스 (Bcrypt.getsalt).
따라서 BCryptPasswordEncoder가 다른 소금 소스를 사용하도록 할 수 없습니다.
그럼에도 서브 클래스를 시도하고 사용자 정의 소금 속성을 추가 할 수 있습니다.

관련 문제