加密汰換

主要特點

  • 身份驗證 (Authentication)

  • 密碼儲存 (Password Storage)

舊加密方式汰換 DelegatingPasswordEncoder

  • 確保使用當前密碼存儲建議對密碼進行編碼

  • 允許以現代和舊式格式驗證密碼

  • 允許將來升級加密方式

如何使用

透過工廠生產,如下

PasswordEncoder passwordEncoder =
    PasswordEncoderFactories.createDelegatingPasswordEncoder();

也可以自定義的使用過的加密列表,如下

即為 新密碼用 BCrypt加密,若為符合其他類型的密碼,則使用對應的加密方式透過match仍可比對通過,在使用新的加密方式 BCrypt 加密。

String idForEncode = "bcrypt";
Map encoders = new HashMap<>();
encoders.put(idForEncode, new BCryptPasswordEncoder());
encoders.put("noop", NoOpPasswordEncoder.getInstance());
encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());
encoders.put("scrypt", new SCryptPasswordEncoder());
encoders.put("sha256", new StandardPasswordEncoder());

PasswordEncoder passwordEncoder =
    new DelegatingPasswordEncoder(idForEncode, encoders);

汰換密碼儲存的標記格式

{id}encodedPassword //encode的種類,和加密後的密碼

透過在開頭使用{id}將使用的加密方式做標記id的標識符是用於查找PasswordEncoder使用的加密方式的標識符。

密碼配對

默認情況下,透過 matches(CharSequence, String),使用輸入密碼與加密過的密碼做比對,若找不到對應的編碼器則使用默認的。

當找不到 id 或為 null,則會引發 IllegalArgumentException

參考

https://docs.spring.io/spring-security/site/docs/5.3.2.BUILD-SNAPSHOT/reference/html5/#preface

Last updated

Was this helpful?