Registrering med Spring Security - kodning af adgangskode

Denne artikel er en del af en serie: • Vejledning i Spring Security Registration

• Registreringsprocessen med forårssikkerhed

• Registrering - Aktiver en ny konto via e-mail

• Forårsikkerhedsregistrering - Send bekræftelses-e-mail igen

• Registrering med Spring Security - Kodning af adgangskode (nuværende artikel) • Registrerings-API'en bliver RESTful

• Spring Security - Nulstil din adgangskode

• Registrering - adgangskodestyrke og regler

• Opdatering af din adgangskode

1. Oversigt

Denne artikel diskuterer en kritisk del af registreringsprocessen - kodeordskodning - dybest set ikke at gemme adgangskoden i almindelig tekst.

Der er et par kodningsmekanismer understøttet af Spring Security - og for artiklen, vi bruger BCrypt, da det normalt er den bedste tilgængelige løsning.

De fleste af de andre mekanismer, som f.eks MD5PasswordEncoder og ShaPasswordEncoder brug svagere algoritmer og er nu udfaset.

2. Definer adgangskodekoderen

Vi starter med at definere den enkle BCryptPasswordEncoder som en bønne i vores konfiguration:

@Bean public PasswordEncoder encoder () {returner ny BCryptPasswordEncoder (); }

Ældre implementeringer - som f.eks SHAPasswordEncoder - ville kræve, at klienten indtastede en saltværdi, når han kodede adgangskoden.

BCrypt dog internt genererer et tilfældigt salt i stedet. Dette er vigtigt at forstå, fordi det betyder, at hvert opkald får et andet resultat, og vi behøver derfor kun at kode kodeordet en gang.

For at få denne tilfældige saltgenerering til at fungere, gemmer BCrypt saltet i selve hash-værdien. For eksempel i følgende hash-værdi:

$ 2a $ 10 $ ZLhnHxdpHETcxmtEStgpI. / Ri1mksgJ9iDP36FmfMdYyVg9g0b2dq

Der er tre felter adskilt af $:

  1. Det “2a” repræsenterer BCrypt-algoritmeversionen
  2. Det “10” repræsenterer styrken af ​​algoritmen
  3. Det “ZLhnHxdpHETcxmtEStgpI.” del er faktisk tilfældigt genereret salt. Dybest set er de første 22 tegn salt. Den resterende del af det sidste felt er den faktiske hashede version af almindelig tekst

Vær også opmærksom på, at BCrypt algoritme genererer en streng af længde 60, så vi skal sørge for, at adgangskoden gemmes i en kolonne, der kan rumme den. En almindelig fejl er at oprette en kolonne med en anden længde og derefter få en Ugyldigt brugernavn eller kodeord fejl på godkendelsestidspunktet.

3. Kod adgangskoden ved registrering

Vi bruger nu PasswordEncoder i vores UserService at hash kodeordet under brugerregistreringsprocessen:

Eksempel 3.1. - Det UserService Blænder adgangskoden

@Autowired privat PasswordEncoder passwordEncoder; @Override offentligt brugerregisterNyBrugerAccount (UserDto-kontoDto) kaster EmailExistsException {if (emailExist (accountDto.getEmail ())) {throw new EmailExistsException ("Der er en konto med den e-mail-adresse:" + accountDto.getEmail ()); } Brugerbruger = ny bruger (); user.setFirstName (accountDto.getFirstName ()); user.setLastName (accountDto.getLastName ()); user.setPassword (passwordEncoder.encode (accountDto.getPassword ())); user.setEmail (accountDto.getEmail ()); user.setRole (ny rolle (Integer.valueOf (1), bruger)); returner repository.save (bruger); }

4. Kod adgangskoden ved godkendelse

Lad os nu håndtere den anden halvdel af denne proces og kode kodeordet, når brugeren godkender.

Først skal vi injicere kodeordskodebønnen, som vi definerede tidligere, i vores godkendelsesudbyder:

@Autowired privat UserDetailsService userDetailsService; @Bean offentlig DaoAuthenticationProvider authProvider () {DaoAuthenticationProvider authProvider = ny DaoAuthenticationProvider (); authProvider.setUserDetailsService (userDetailsService); authProvider.setPasswordEncoder (encoder ()); returner authProvider; }

Sikkerhedskonfigurationen er enkel:

  • vi injicerer vores implementering af brugeroplysningstjenesten
  • vi definerer en godkendelsesudbyder, der refererer til vores informationstjeneste
  • vi aktiverer også adgangskodekoderen

Og endelig skal vi henvis denne autoriseringsudbyder i vores XML-sikkerhedskonfiguration:

Eller hvis du bruger Java-konfiguration:

@Configuration @ComponentScan (basePackages = {"com.baeldung.security"}) @EnableWebSecurity public class SecSecurityConfig udvider WebSecurityConfigurerAdapter {@Override beskyttet ugyldig konfiguration (AuthenticationManagerBuilder auth) kaster Exception {auth.authentication; } ...}

5. Konklusion

Denne hurtige vejledning fortsætter registreringsserien ved at vise, hvordan adgangskoden gemmes korrekt i databasen ved at udnytte den enkle, men meget kraftfulde BCrypt-implementering.

Det fuld implementering af denne vejledning til registrering med Spring Security kan findes på GitHub.

Næste » Registrerings-API'en bliver RESTful « Tidligere forårssikkerhedsregistrering - Send bekræftelses-e-mail igen

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