@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
'자바 > Spring Security' 카테고리의 다른 글
[JWT] 리프레쉬 토큰 - 엑세스 토큰 (0) | 2024.01.19 |
---|---|
[Security] __AuthorizationFilter?__ (0) | 2024.01.19 |
[Spring Security] JwtAuthenticationFilter 관련 (0) | 2024.01.19 |
[Security] `@WithAnonymousUser` 의 역할 (0) | 2024.01.14 |