Spring Security Husk mig

1. Oversigt

Denne tutorial vises hvordan du aktiverer og konfigurerer Husk mig-funktionalitet i en webapplikation med Spring Security. Opsætning af MVC-applikationen med sikkerhed og et simpelt formularlogin er allerede blevet drøftet.

Mekanismen vil være i stand til identificer brugeren på tværs af flere sessioner - så den første ting at forstå er, at Remember Me kun sparker ind efter sessionens timeout. Som standard sker dette efter 30 minutters inaktivitet, men timeout kan konfigureres i web.xml.

Bemærk: denne vejledning fokuserer på standard cookie-baseret tilgang. For den vedvarende tilgang, se på Spring Security - Persistent Remember Me-guiden.

2. Sikkerhedskonfigurationen

Lad os se, hvordan du konfigurerer sikkerhedskonfigurationen ved hjælp af Java:

@Configuration @EnableWebSecurity offentlig klasse SecSecurityConfig udvider WebSecurityConfigurerAdapter {@Bean ("authenticationManager") @ Override public AuthenticationManager authenticationManagerBean () kaster undtagelse {returnerer super.authenticationManagerBean (); } @Autowired public void configureGlobal (AuthenticationManagerBuilder auth) kaster Undtagelse {auth.inMemoryAuthentication () .withUser ("user1"). Adgangskode ("{noop} user1Pass") .roller ("USER"). Og () .withUser (" admin1 "). adgangskode (" {noop} admin1Pass "). roller (" ADMIN "); } @ Override beskyttet ugyldig konfiguration (endelig HttpSecurity http) kaster undtagelse {http.authorizeRequests () .antMatchers ("/ anonym *"). Anonym () .antMatchers ("/ login *"). PermitAll () .anyRequest (). godkendt () .og () .formLogin () .loginPage ("/ login.html") .loginProcessingUrl ("/ login"). fejlUrl ("/ login.html? fejl = sand"). og () .logout ( ) .deleteCookies ("JSESSIONID") .og () .rememberMe (). nøgle ("unikAndSecret"); }}

Som du kan se, den grundlæggende konfiguration ved hjælp af Husk mig() metode er ekstremt enkel, mens den forbliver meget fleksibel gennem yderligere muligheder. Det nøgle er vigtigt her - det er en privat værdihemmelighed for hele applikationen, og den vil blive brugt til generering af tokens indhold.

Derudover er tid, som tokenet er gyldigt, kan konfigureres fra standard på 2 uger til - for eksempel - en dag med tokenValiditySeconds ():

rememberMe (). nøgle ("unikAndSecret"). tokenValiditySeconds (86400)

Vi kan også se på den tilsvarende XML-konfiguration:

3. Loginformularen

Loginformularen ligner den, vi brugte til formularlogin:

Bruger:
Adgangskode:
Husk mig:

Bemærk det nyligt tilføjede afkrydsningsfelt input - kortlægning til Husk mig. Dette tilføjede input er nok til at logge ind med husk mig aktiv.

Denne standardsti kan også ændres som følger:

.rememberMe (). rememberMeParameter ("husk mig-ny")

4. Cookien

Mekanismen opretter en ekstra cookie - "husk mig" -cookien - når brugeren logger ind.

Det Husk mig cookie indeholder følgende data:

  • brugernavn - for at identificere den indlogede hovedstol
  • udløbstid - at udløbe cookien standard er 2 uger
  • MD5 hash - af de foregående 2 værdier - brugernavn og udløbstid, plus adgangskode og det foruddefinerede nøgle

Den første ting at bemærke her er, at begge brugernavn og adgangskode er en del af cookien - det betyder, at hvis en af ​​dem ændres, er cookien ikke længere gyldig. Også den brugernavn kan læses fra cookien.

Derudover er det vigtigt at forstå, at denne mekanisme er potentielt sårbar, hvis husk mig-cookien er fanget. Cookien er gyldig og anvendelig indtil den udløber, eller legitimationsoplysningerne ændres.

5. I praksis

For nemt at se husk mig-mekanismen fungerer kan du:

  • log ind med husk mig aktiv
  • vent på, at sessionen udløber (eller fjern JSESSIONID cookie i browseren)
  • opdater siden

Uden at huske mig aktiv, skal brugeren være, efter at cookien udløber omdirigeres tilbage til login-siden. Med husk mig, brugeren nu forbliver logget ind ved hjælp af det nye token / cookie.

6. Konklusion

Denne vejledning viste, hvordan du opsætter og konfigurerer Husk mig-funktionalitet i sikkerhedskonfigurationen, og kort beskrevet, hvilken slags data der er indeholdt i cookien.

Implementeringen kan findes i eksemplet med Github-projektet - dette er et Eclipse-baseret projekt, så det skal være let at importere og køre som det er.

Når projektet kører lokalt, login.html kan tilgås på localhost.