Proljetna sigurnost Zapamti me

1. Pregled

Ovaj tutorial će pokazati kako omogućiti i konfigurirati funkcionalnost Remember Me u web aplikaciji s Spring Security. Već je bilo riječi o postavljanju MVC aplikacije sa sigurnošću i jednostavnom prijavom putem obrasca.

Mehanizam će moći identificirati korisnika u više sesija - pa prvo što treba shvatiti je da se Remember Me pokreće tek nakon isteka sesije. Prema zadanim postavkama to se događa nakon 30 minuta neaktivnosti, ali vremensko ograničenje može se konfigurirati u web.xml.

Napomena: ovaj se vodič usredotočuje na standardni pristup zasnovan na kolačićima. Za ustrajni pristup pogledajte vodič Spring Security - Persistent Remember Me.

2. Konfiguracija sigurnosti

Pogledajmo kako postaviti sigurnosnu konfiguraciju pomoću Jave:

@Configuration @EnableWebSecurity javna klasa SecSecurityConfig proširuje WebSecurityConfigurerAdapter {@Bean ("authenticationManager") @Override public AuthenticationManager authenticationManagerBean () baca izuzetak {return super.authenticationManagerBean; } @Autowired javna void configureGlobal (AuthenticationManagerBuilder auth) baca izuzetak {auth.inMemoryAuthentication () .withUser ("user1"). Password ("{noop} user1Pass"). Role ("USER"). I () .withUser (" admin1 "). lozinka (" {noop} admin1Pass "). uloge (" ADMINISTRATOR "); } @Override zaštićena void konfiguracija (konačni HttpSecurity http) baca izuzetak {http.authorizeRequests () .antMatchers ("/ anonimni *"). Anonimni () .antMatchers ("/ login *"). AllowAll () .anyRequest (). authenticated () .and () .formLogin () .loginPage ("/ login.html") .loginProcessingUrl ("/ login") .failureUrl ("/ login.html? error = true"). i () .logout ( ) .deleteCookies ("JSESSIONID") .and () .rememberMe (). key ("uniqueAndSecret"); }}

Kao što vidiš, osnovna konfiguracija pomoću Zapamti me() metoda je izuzetno jednostavan, a ostaje vrlo fleksibilan kroz dodatne mogućnosti. The ključ ovdje je važno - to je privatna tajna vrijednosti za cijelu aplikaciju i koristit će se prilikom generiranja sadržaja tokena.

Uz to, vrijeme valjanosti tokena može se konfigurirati od zadanih 2 tjedna do - na primjer - jednog dana korištenja tokenValiditySeconds ():

rememberMe (). key ("uniqueAndSecret"). tokenValiditySeconds (86400)

Možemo pogledati i ekvivalentnu XML konfiguraciju:

3. Obrazac za prijavu

Obrazac za prijavu sličan je onom koji smo koristili za prijavu u obrazac:

Korisnik:
Zaporka:
Zapamti me:

Primijetite novo dodano potvrdni okvir ulaz - preslikavanje u Zapamti me. Ovaj dodani unos dovoljan je za prijavu s zapamti me aktivnim.

Ovaj zadani put također se može promijeniti na sljedeći način:

.rememberMe (). RememberMeParameter ("zapamti-me-novo")

4. Kolačić

Mehanizam će stvoriti dodatni kolačić - kolačić "zapamti me" - kada se korisnik prijavi.

The Kolačić Zapamti me sadrži sljedeće podatke:

  • Korisničko ime - identificirati prijavljenog principala
  • vrijeme isteka - za istek kolačića; zadana vrijednost je 2 tjedna
  • MD5 hash - od prethodne 2 vrijednosti - Korisničko ime i vrijeme isteka, plus zaporka i unaprijed definirani ključ

Prvo što ovdje treba primijetiti jest da su oba Korisničko ime i zaporka su dio kolačića - to znači da, ako se bilo koji promijeni, kolačić više nije valjan. Također, Korisničko ime može se pročitati iz kolačića.

Uz to, važno je shvatiti da je ovaj mehanizam potencijalno ranjiv ako je zarobljen kolačić Remember me. Kolačić će biti valjan i upotrebljiv dok ne istekne ili dok se vjerodajnice ne promijene.

5. U praksi

Da biste lako vidjeli kako mehanizam Remember me radi, možete:

  • prijavite se sjetite me se aktivnog
  • pričekajte da sesija istekne (ili uklonite JSESSIONID kolačić u pregledniku)
  • osvježite stranicu

Bez da me se sjećate aktivnog, nakon isteka kolačića korisnik bi trebao biti preusmjeren natrag na stranicu za prijavu. Sa sjeti se mene, korisnika sada ostaje prijavljen uz pomoć novog tokena / kolačića.

6. Zaključak

Ovaj je vodič pokazao kako postaviti i konfigurirati funkcionalnost Remember Me u sigurnosnoj konfiguraciji i ukratko je opisao vrste podataka koji ulaze u kolačić.

Implementaciju možete pronaći u primjeru Github projekta - ovo je projekt zasnovan na Eclipseu, pa bi ga trebalo biti lako uvesti i pokrenuti kakav jest.

Kada se projekt izvodi lokalno, login.html može se pristupiti na localhostu.