복붙노트

[SPRING] 스프링 보안을 사용할 때 암호 해싱 알고리즘을 변경하는 방법은 무엇입니까?

SPRING

스프링 보안을 사용할 때 암호 해싱 알고리즘을 변경하는 방법은 무엇입니까?

현재의 표준 - 부적절한 해싱 알고리즘을 사용하는 기존 Spring MVC 기반 웹 응용 프로그램에서 작업하고 있습니다. 이제 모든 해시를 점차적으로 bcrypt로 마이그레이션하려고합니다. 저의 고수준 전략은 다음과 같습니다.

Spring Security로이 전략을 구현하는 가장 관용적 인 방법은 무엇입니까? 사용자 정의 필터 또는 AccessDecisionManager에서 내 필터를 사용해야합니까 ...?

해결법

  1. ==============================

    1.AuthenticationProvider는 사용자 데이터와 암호가 실제로 비교되어 사용 가능한 모든 정보가있는 곳이므로 사용자 정의해야 할 것입니다.

    AuthenticationProvider는 사용자 데이터와 암호가 실제로 비교되어 사용 가능한 모든 정보가있는 곳이므로 사용자 정의해야 할 것입니다.

    authenticate 메소드에서는 먼저 사용자 데이터를로드합니다. 그런 다음 사용자가 입력 한 암호와 BCryptPasswordEncoder를 모두 확인하십시오. 어느 쪽이나 일치하는 것이없는 경우는 BadCredentialsException를 Throw합니다.

    사용자가 성공적으로 인증을 받았고 (매우 중요 :-)) 비밀번호가 레거시 형식 (레거시 인코더가 일치 함) 인 경우 몇 가지 추가 코드를 호출하여 사용자의 계정 데이터를 업데이트하고 기존 해시를 bcrypt로 바꿉니다. BCryptPasswordEncoder를 사용하여 새 해시를 만들 수도 있습니다.

    원하는 경우 비교를 수행하기 전에 저장된 해시가 이미 bcrypt인지 여부를 사전에 감지 할 수 있습니다. Bcrypt 문자열은 상당히 다른 형식을 가지고 있습니다.

    유효한 계정 이름을 추측하기 어렵게하려면 제공된 사용자 이름이 존재할 때와 그렇지 않은 경우 (동일한 시간에 대해) 메소드가 동일하게 동작하도록해야합니다. 제공된 사용자 이름에 대한 사용자 데이터가없는 경우에도 인코더를 호출하십시오.

  2. ==============================

    2.나는이 일을하는 가장 좋은 방법은 인증 공급자에게 암호 엔코더를 지정하는 것, 아래의 내용을 참조하십시오.

    나는이 일을하는 가장 좋은 방법은 인증 공급자에게 암호 엔코더를 지정하는 것, 아래의 내용을 참조하십시오.

    <authentication-manager>
        <authentication-provider user-service-ref="userService">
            <password-encoder ref="passwordEncoder">
                <salt-source ref="saltSource" />
            </password-encoder>
        </authentication-provider>
    </authentication-manager>
    
    
    <beans:bean     class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"
        id="passwordEncoder" />
    
    <beans:bean     class="org.springframework.security.authentication.dao.ReflectionSaltSource"
        id="saltSource">
        <beans:property name="userPropertyToUse" value="userName" />
    </beans:bean>
    
  3. from https://stackoverflow.com/questions/13762772/how-to-change-password-hashing-algorithm-when-using-spring-security by cc-by-sa and MIT license