Regisztráció a Spring Security-nél - Jelszó kódolás

Ez a cikk egy sorozat része: • Tavaszi biztonsági regisztráció bemutató

• A regisztráció folyamata tavaszi biztonsággal

• Regisztráció - Új fiók aktiválása e-mailben

• Tavaszi biztonsági regisztráció - Ellenőrző e-mail újraküldése

• Regisztráció a Spring Security szolgáltatással - Jelszó kódolás (aktuális cikk) • A Registration API RESTful lesz

• Tavaszi biztonság - állítsa vissza jelszavát

• Regisztráció - A jelszó erőssége és szabályai

• Jelszavának frissítése

1. Áttekintés

Ez a cikk a regisztráció kritikus részét tárgyalja - jelszó kódolás - alapvetően nem tárolja a jelszót egyszerű szövegben.

Néhány kódolási mechanizmust támogat a Spring Security - és a cikkhez a BCrypt-et fogjuk használni, mivel ez általában a rendelkezésre álló legjobb megoldás.

A legtöbb egyéb mechanizmus, például a MD5PasswordEncoder és ShaPasswordEncoder gyengébb algoritmusokat használ, és most már elavultak.

2. Határozza meg a Jelszó kódolót

Először az egyszerű BCryptPasswordEncodert definiáljuk babként a konfigurációnkban:

@Bean public PasswordEncoder kódoló () {return new BCryptPasswordEncoder (); }

Régebbi megvalósítások - mint pl SHAPasswordEncoder - megkövetelné, hogy az ügyfél adja meg a sóértéket a jelszó kódolásakor.

A BCrypt azonban belül véletlenszerű sót generál helyette. Ezt fontos megérteni, mert ez azt jelenti, hogy minden hívásnak más eredménye lesz, ezért csak egyszer kell kódolnunk a jelszót.

Ennek a véletlenszerű sótermelésnek a működése érdekében a BCrypt magában a hash értékben tárolja a sót. Például a következő hash értékben:

$ 2a $ 10 $ ZLhnHxdpHETcxmtEStgpI. / Ri1mksgJ9iDP36FmfMdYyVg9g0b2dq

Három mező van elválasztva $ -val:

  1. A „2a” a BCrypt algoritmus verzióját jelenti
  2. A “10” az algoritmus erősségét jelenti
  3. A „ZLhnHxdpHETcxmtEStgpI.” része valójában a véletlenszerűen előállított só. Alapvetően az első 22 karakter só. Az utolsó mező fennmaradó része a sima szöveg tényleges kivonatolt változata

Ne feledje továbbá, hogy a BCrypt az algoritmus 60 hosszúságú karakterláncot generál, ezért meg kell győződnünk arról, hogy a jelszó egy olyan oszlopban lesz tárolva, amely befogadja azt. Gyakori hiba, hogy létrehoz egy eltérő hosszúságú oszlopot, majd megszerez egy Érvénytelen felhasználónév vagy jelszó hiba a hitelesítéskor.

3. Regisztrációkor kódolja a jelszót

Most fogjuk használni a PasswordEncoder miénkben UserService a jelszó kivonása a felhasználói regisztráció során:

3.1. Példa - A UserService Törli a jelszót

@Autowired private PasswordEncoder passwordEncoder; @Orride public User registerNewUserAccount (UserDto accountDto) dobja az EmailExistsException {if (emailExist (accountDto.getEmail ())) {dobja új EmailExistsException ("Van egy fiók azzal az e-mail címmel:" + accountDto.getEmail ()); } Felhasználó felhasználó = új Felhasználó (); user.setFirstName (accountDto.getFirstName ()); user.setLastName (accountDto.getLastName ()); user.setPassword (passwordEncoder.encode (accountDto.getPassword ())); user.setEmail (accountDto.getEmail ()); user.setRole (új szerep (Integer.valueOf (1), felhasználó)); return repository.save (felhasználó); }

4. Kódolja a jelszót a hitelesítéskor

Most kezeljük a folyamat másik felét, és kódoljuk a jelszót, amikor a felhasználó hitelesít.

Először be kell adnunk a korábban definiált jelszó kódoló babot a hitelesítés-szolgáltatónkba:

@Autowired private UserDetailsService userDetailsService; @Bean public DaoAuthenticationProvider authProvider () {DaoAuthenticationProvider authProvider = új DaoAuthenticationProvider (); authProvider.setUserDetailsService (userDetailsService); authProvider.setPasswordEncoder (kódoló ()); return authProvider; }

A biztonsági konfiguráció egyszerű:

  • injektáljuk a felhasználói részletek szolgáltatás megvalósítását
  • meghatározunk egy hitelesítési szolgáltatót, amely hivatkozik a részletek szolgáltatásunkra
  • engedélyezzük a jelszó kódolót is

És végül nekünk kell hivatkozás erre a hitelesítésszolgáltatóra biztonsági XML konfigurációnkban:

Vagy ha Java konfigurációt használ:

@Configuration @ComponentScan (basePackages = {"com.baeldung.security"}) @EnableWebSecurity nyilvános osztály A SecSecurityConfig kiterjeszti a WebSecurityConfigurerAdapter {@Override protected void configure (AuthenticationManagerBuilder auth) } ...}

5. Következtetés

Ez a gyors bemutató folytatja a Regisztráció sorozatot, bemutatva, hogyan kell helyesen tárolni a jelszót az adatbázisban az egyszerű, de nagyon hatékony BCrypt megvalósítás segítségével.

A teljes végrehajtása A regisztráció a Spring Security oktatóanyagával megtalálható a GitHub oldalon.

Következő » A Registration API RESTful lesz « Előző tavaszi biztonsági regisztráció - Ellenőrző e-mail újraküldése