這篇文章將為大家詳細(xì)講解有關(guān)Spring Security5中默認(rèn)密碼編碼器的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
順德網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,順德網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為順德數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的順德做網(wǎng)站的公司定做!
1.概述
在Spring Security 4中,可以使用內(nèi)存中身份驗證以純文本格式存儲密碼。
對版本5中的密碼管理過程進(jìn)行了重大改進(jìn),為密碼編碼和解碼引入了更安全的默認(rèn)機(jī)制。這意味著如果您的Spring應(yīng)用程序以純文本格式存儲密碼,升級到Spring Security 5可能會導(dǎo)致問題。
在這個簡短的教程中,我們將描述其中一個潛在的問題,并展示該問題的解決方案。
2. Spring Security 4
我們首先展示一個標(biāo)準(zhǔn)的安全配置,它提供簡單的內(nèi)存中身份驗證(適用于Spring 4):
@Configuration public class InMemoryAuthWebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("spring") .password("secret") .roles("USER"); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/private/**") .authenticated() .antMatchers("/public/**") .permitAll() .and() .httpBasic(); } }
此配置定義所有/私有/映射方法的身份驗證以及/ public /下所有內(nèi)容的公共訪問。
如果我們在Spring Security 5下使用相同的配置,我們會收到以下錯誤:
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
該錯誤告訴我們由于沒有為我們的內(nèi)存中身份驗證配置密碼編碼器,因此無法解碼給定的密碼。
3. Spring Security 5
我們可以通過使用PasswordEncoderFactories類定義DelegatingPasswordEncoder來解決此錯誤。
我們使用此編碼器通過AuthenticationManagerBuilder配置我們的用戶:
@Configuration public class InMemoryAuthWebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); auth.inMemoryAuthentication() .withUser("spring") .password(encoder.encode("secret")) .roles("USER"); } }
現(xiàn)在,通過這種配置,我們使用BCrypt以以下格式存儲我們的內(nèi)存中密碼:
{bcrypt}$2a$10$MF7hYnWLeLT66gNccBgxaONZHbrSMjlUofkp50sSpBw2PJjUqU.zS
雖然我們可以定義自己的一組密碼編碼器,但建議堅持使用PasswordEncoderFactories中提供的默認(rèn)編碼器。
3.1.遷移現(xiàn)有密碼
我們可以通過以下方式將現(xiàn)有密碼更新為推薦的Spring Security 5標(biāo)準(zhǔn):
更新純文本存儲密碼及其編碼值:
String encoded = new BCryptPasswordEncoder().encode(plainTextPassword);
前綴散列存儲的密碼及其已知的編碼器標(biāo)識符:
{bcrypt}$2a$10$MF7hYnWLeLT66gNccBgxaONZHbrSMjlUofkp50sSpBw2PJjUqU.zS {sha256}97cde38028ad898ebc02e690819fa220e88c62e0699403e94fff291cfffaf8410849f27605abcbc0
當(dāng)存儲密碼的編碼機(jī)制未知時,請求用戶更新其密碼
關(guān)于“Spring Security5中默認(rèn)密碼編碼器的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。