Spring Security Onthoud mij

1. Overzicht

Deze tutorial zal laten zien hoe u de Remember Me-functionaliteit in een webtoepassing kunt inschakelen en configureren met Spring Security. Het instellen van de MVC-applicatie met beveiliging en een eenvoudig inloggen via een formulier is al besproken.

Het mechanisme zal dat kunnen identificeer de gebruiker over meerdere sessies - dus het eerste dat u moet begrijpen, is dat Remember Me pas begint nadat de sessie is verstreken. Dit gebeurt standaard na 30 minuten inactiviteit, maar de time-out kan worden geconfigureerd in het web.xml.

Let op: deze tutorial richt zich op de standaard op cookies gebaseerde aanpak. Voor de aanhoudende aanpak, bekijk de Spring Security - Persistent Remember Me-gids.

2. De beveiligingsconfiguratie

Laten we eens kijken hoe we de beveiligingsconfiguratie kunnen instellen met Java:

@Configuration @EnableWebSecurity openbare klasse SecSecurityConfig breidt WebSecurityConfigurerAdapter uit {@Bean ("authenticationManager") @Override openbare AuthenticationManager authenticationManagerBean () gooit Uitzondering {return super.authenticationManagerBean (); } @Autowired public void configureGlobal (AuthenticationManagerBuilder auth) genereert uitzondering {auth.inMemoryAuthentication () .withUser ("user1"). Wachtwoord ("{noop} user1Pass"). Rollen ("USER") .en () .withUser (" admin1 "). wachtwoord (" {noop} admin1Pass "). rollen (" ADMIN "); } @Override protected void configure (laatste HttpSecurity http) genereert uitzondering {http.authorizeRequests () .antMatchers ("/ anonymous *"). Anonymous () .antMatchers ("/ login *"). AllowAll () .anyRequest (). geverifieerd () .and () .formLogin () .loginPage ("/ login.html") .loginProcessingUrl ("/ login") .failureUrl ("/ login.html? error = true") .en () .logout ( ) .deleteCookies ("JSESSIONID") .and () .rememberMe (). key ("uniqueAndSecret"); }}

Zoals je kunt zien, de basisconfiguratie met behulp van de Onthoud me() methode is uiterst eenvoudig en toch zeer flexibel door extra opties. De sleutel is hier belangrijk - het is een privéwaarde-geheim voor de hele applicatie en het zal worden gebruikt bij het genereren van de inhoud van het token.

Bovendien is het tijd dat het token geldig is, kan worden geconfigureerd van de standaard 2 weken tot - bijvoorbeeld - een dag gebruik tokenValiditySeconds ():

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

We kunnen ook de equivalente XML-configuratie bekijken:

3. Het aanmeldingsformulier

Het inlogformulier is vergelijkbaar met het formulier dat we hebben gebruikt voor het inloggen op het formulier:

Gebruiker:
Wachtwoord:
Onthoud me:

Let op de nieuw toegevoegde selectievakje input - mapping naar Onthoud me. Deze toegevoegde invoer is voldoende om in te loggen met onthoud mij actief.

Dit standaardpad kan ook als volgt worden gewijzigd:

.rememberMe (). RememberMeParameter ("Remember-Me-New")

4. De cookie

Het mechanisme zal een extra cookie aanmaken - de "onthoud mij" -cookie - wanneer de gebruiker inlogt.

De Onthoud mij cookie bevat de volgende gegevens:

  • gebruikersnaam - om de ingelogde principal te identificeren
  • vervaltijd - om de cookie te laten vervallen; standaard is 2 weken
  • MD5-hash - van de vorige 2 waarden - gebruikersnaam en vervaltijd, plus de wachtwoord en de voorgedefinieerde sleutel

Het eerste dat hier opvalt, is dat zowel de gebruikersnaam en de wachtwoord maken deel uit van de cookie - dit betekent dat, als een van beide wordt gewijzigd, de cookie niet langer geldig is. Ook de gebruikersnaam kan worden afgelezen uit de cookie.

Bovendien is het belangrijk om te begrijpen dat dit mechanisme mogelijk kwetsbaar is als de onthoud mij-cookie wordt vastgelegd. De cookie is geldig en bruikbaar totdat het verloopt of de inloggegevens zijn gewijzigd.

5. In de praktijk

Om gemakkelijk te zien hoe het onthoud mij-mechanisme werkt, kunt u:

  • log in met onthoud mij actief
  • wacht tot de sessie verloopt (of verwijder het JSESSIONID cookie in de browser)
  • Ververs de pagina

Zonder mij te herinneren actief, zou de gebruiker na het verlopen van de cookie moeten zijn teruggestuurd naar de inlogpagina. Met onthoud mij, de gebruiker nu blijft ingelogd met behulp van het nieuwe token / cookie.

6. Conclusie

Deze tutorial liet zien hoe je de Remember Me-functionaliteit instelt en configureert in de beveiligingsconfiguratie, en beschreef kort wat voor soort gegevens er in de cookie terechtkomen.

De implementatie is te vinden in het voorbeeld Github-project - dit is een op Eclipse gebaseerd project, dus het moet gemakkelijk te importeren en uit te voeren zijn zoals het is.

Als het project lokaal wordt uitgevoerd, wordt het login.html is toegankelijk op localhost.