[Security] PasswordEncoder..?

@Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

PasswordEncoder 빈 주입

return new BCryptPasswordEncoder(); ->   return PasswordEncoderFactories.createDelegatingPasswordEncoder();

그냥 BCryptPasswordEncoder() 라고 직접 지정해서 사용하는 것과 무슨 차이인지 궁금해졌다.

  • createDelegatingPasswordEncoder
    • 시큐리티에서 제공하는 패스워드 인코딩을 위한 메서드이다.
    • 다양한 인코딩 알고리즘을 위임하여 사용할 수 이씅며
    • 각각의 알고리즘은 특정 접두사를 통해 식별된다.
    public static PasswordEncoder createDelegatingPasswordEncoder() {
    		String encodingId = "bcrypt";
    		Map<String, PasswordEncoder> encoders = new HashMap<>();
    		encoders.put(encodingId, new BCryptPasswordEncoder());
    		encoders.put("ldap", new org.springframework.security.crypto.password.LdapShaPasswordEncoder());
    		encoders.put("MD4", new org.springframework.security.crypto.password.Md4PasswordEncoder());
    		encoders.put("MD5", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("MD5"));
    		encoders.put("noop", org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance());
    		encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());
    		encoders.put("scrypt", new SCryptPasswordEncoder());
    		encoders.put("SHA-1", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-1"));
    		encoders.put("SHA-256",
    				new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-256"));
    		encoders.put("sha256", new org.springframework.security.crypto.password.StandardPasswordEncoder());
    		encoders.put("argon2", new Argon2PasswordEncoder());
    		return new DelegatingPasswordEncoder(encodingId, encoders);
    	}

    예를들어 {bcrypt} 접두사는 Bcrypt 알고리즘을 사용하여 인코딩된 패스워드임을 나타낸다

    {bcrypt}$2a$10$W3 ... 
    • 이런 식으로 패스워드가 인코딩되는것이다 ㄷㄷ.

    해당 방식의 패스워드 인코딩의 장점

    • 여러 인코딩 알고리즘을 지원할 수 있습니다 !
      • 시스템에 패스워드 인코딩이 변경되더라도 이전 인코딩 패스워드는 접두사를 통해 어떤 방식으로 디코딩하면 되는지 알 수 있습니다.
      • 이전 알고리즘으로 인코딩된 패스워드를 새로운 알고리즘으로 재인코딩이 가능함


Uploaded by N2T