Registrácia s Spring Security - kódovanie hesla

Tento článok je súčasťou série: • Výukový program pre jarnú registráciu zabezpečenia

• Proces registrácie s jarnou bezpečnosťou

• Registrácia - aktivácia nového účtu e-mailom

• Jarná bezpečnostná registrácia - opätovné odoslanie overovacieho e-mailu

• Registrácia s Spring Security - kódovanie hesla (aktuálny článok) • Registračné API sa stáva RESTful

• Jarná bezpečnosť - obnovte svoje heslo

• Registrácia - sila hesla a pravidlá

• Aktualizácia hesla

1. Prehľad

Tento článok pojednáva o dôležitej časti procesu registrácie - kódovanie hesla - v podstate neukladanie hesla v holom texte.

Spring Security podporuje niekoľko kódovacích mechanizmov - a pre tento článok použijeme BCrypt, pretože je to zvyčajne najlepšie dostupné riešenie.

Väčšina ďalších mechanizmov, ako napríklad MD5PasswordEncoder a ShaPasswordEncoder používajú slabšie algoritmy a dnes sú zastarané.

2. Definujte kódovač hesla

Začneme definovaním jednoduchého BCryptPasswordEncoder ako fazule v našej konfigurácii:

@Bean public PasswordEncoder encoder () {return new BCryptPasswordEncoder (); }

Staršie implementácie - ako napr SHAPasswordEncoder - bude vyžadovať, aby klient pri kódovaní hesla odovzdal soľnú hodnotu.

BCrypt však bude interne generovať náhodnú soľ namiesto toho. Je to dôležité pochopiť, pretože to znamená, že každé volanie bude mať iný výsledok, a preto musíme heslo zakódovať iba raz.

Aby toto náhodné generovanie soli fungovalo, BCrypt uloží soľ do samotnej hodnoty hash. Napríklad v nasledujúcej hodnote hash:

$ 2a $ 10 $ ZLhnHxdpHETcxmtEStgpI. / Ri1mksgJ9iDP36FmfMdYyVg9g0b2dq

Existujú tri polia oddelené znakom $:

  1. The „2a“ predstavuje verziu algoritmu BCrypt
  2. The “10” predstavuje silu algoritmu
  3. The „ZLhnHxdpHETcxmtEStgpI.“ časť je vlastne náhodne generovaná soľ. Prvých 22 znakov je v podstate soľ. Zvyšná časť posledného poľa je skutočná hašovaná verzia obyčajného textu

Uvedomte si tiež, že BCrypt Algoritmus generuje reťazec dĺžky 60, takže sa musíme uistiť, že heslo bude uložené v stĺpci, ktorý ho dokáže prispôsobiť. Častou chybou je vytvorenie stĺpca inej dĺžky a potom získanie Nesprávne užívateľské meno alebo heslo chyba v čase overenia.

3. Pri registrácii zakódujte heslo

Teraz použijeme PasswordEncoder v našom UserService zahašovať heslo počas procesu registrácie používateľa:

Príklad 3.1. - UserService Zahašuje heslo

@Autowired private PasswordEncoder hesloEncoder; @Override public User registerNewUserAccount (UserDto accountDto) hodí EmailExistsException {if (emailExist (accountDto.getEmail ())) {hodiť novú EmailExistsException ("Existuje účet s touto e-mailovou adresou:" + accountDto.getEmail ()); } User user = new User (); user.setFirstName (accountDto.getFirstName ()); user.setLastName (accountDto.getLastName ()); user.setPassword (hesloEncoder.encode (accountDto.getPassword ())); user.setEmail (accountDto.getEmail ()); user.setRole (new Role (Integer.valueOf (1), user)); return repository.save (užívateľ); }

4. Kódujte heslo pri autentifikácii

Poďme teraz na druhú polovicu tohto procesu a po autentifikácii používateľa zakódujme heslo.

Najskôr musíme do nášho poskytovateľa autentifikácie vložiť fazuľu kódovača hesiel, ktorú sme definovali skôr:

@Autowired private UserDetailsService userDetailsService; @Bean public DaoAuthenticationProvider authProvider () {DaoAuthenticationProvider authProvider = nový DaoAuthenticationProvider (); authProvider.setUserDetailsService (userDetailsService); authProvider.setPasswordEncoder (encoder ()); návrat authProvider; }

Konfigurácia zabezpečenia je jednoduchá:

  • vkladáme našu implementáciu služby podrobností o používateľoch
  • definujeme poskytovateľa autentifikácie, ktorý odkazuje na našu podrobnú službu
  • povoľujeme tiež kódovač hesiel

A nakoniec musíme odkaz na tohto poskytovateľa autentifikácie v našej konfigurácii zabezpečenia XML:

Alebo v prípade, že používate konfiguráciu Java:

@Configuration @ComponentScan (basePackages = {"com.baeldung.security"}) @EnableWebSecurity verejná trieda SecSecurityConfig rozširuje WebSecurityConfigurerAdapter {@Override protected void configure (AuthenticationManagerBuilder auth) vyvolá výnimku {auth.authenticationProvider () } ...}

5. Záver

Tento rýchly tutoriál pokračuje v sérii Registrácia a ukazuje, ako správne uložiť heslo v databáze pomocou jednoduchej, ale veľmi výkonnej implementácie BCrypt.

The úplná implementácia tohto tutoriálu Registrácia s jarným zabezpečením nájdete na GitHub.

Ďalšie » Registračné API sa stáva RESTful « Predchádzajúca jarná bezpečnostná registrácia - znova odoslať overovací e-mail

$config[zx-auto] not found$config[zx-overlay] not found