Frühlingssicherheit Erinnere dich an mich

1. Übersicht

Dieses Tutorial zeigt, wie Sie die Remember Me-Funktionalität in einer Webanwendung mit Spring Security aktivieren und konfigurieren . Das Einrichten der MVC-Anwendung mit Sicherheit und einer einfachen Formularanmeldung wurde bereits erläutert.

Der Mechanismus kann den Benutzer über mehrere Sitzungen hinweg identifizieren. Das erste, was Sie verstehen müssen, ist, dass Remember Me erst nach Ablauf der Sitzungszeit abläuft. Standardmäßig geschieht dies nach 30 Minuten Inaktivität. Das Zeitlimit kann jedoch in der Datei web.xml konfiguriert werden .

Hinweis: Dieses Tutorial konzentriert sich auf den Standard-Cookie-basierten Ansatz . Informationen zum dauerhaften Ansatz finden Sie im Handbuch Spring Security - Persistent Remember Me.

2. Die Sicherheitskonfiguration

Mal sehen, wie man die Sicherheitskonfiguration mit Java einrichtet:

@Configuration @EnableWebSecurity public class SecSecurityConfig extends WebSecurityConfigurerAdapter { @Bean("authenticationManager") @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user1").password("{noop}user1Pass").roles("USER") .and() .withUser("admin1").password("{noop}admin1Pass").roles("ADMIN"); } @Override protected void configure(final HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/anonymous*").anonymous() .antMatchers("/login*").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login.html") .loginProcessingUrl("/login") .failureUrl("/login.html?error=true") .and() .logout().deleteCookies("JSESSIONID") .and() .rememberMe().key("uniqueAndSecret") ; } }

Wie Sie sehen können, ist die Grundkonfiguration mit der Methode RememberMe () äußerst einfach und bleibt durch zusätzliche Optionen sehr flexibel. Der Schlüssel ist hier wichtig - er ist ein privates Wertgeheimnis für die gesamte Anwendung und wird beim Generieren des Inhalts des Tokens verwendet.

Darüber hinaus kann die Gültigkeitsdauer des Tokens mithilfe von tokenValiditySeconds () von standardmäßig 2 Wochen bis beispielsweise einem Tag konfiguriert werden :

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

Wir können uns auch die entsprechende XML-Konfiguration ansehen:

3. Das Anmeldeformular

Das Anmeldeformular ähnelt dem, das wir für die Formularanmeldung verwendet haben:


    
User:
Password:
Remember Me:

Beachten Sie die neu hinzugefügte Checkbox- Eingabe - Zuordnung zu Remember-Me . Diese zusätzliche Eingabe reicht aus, um sich anzumelden und sich an mich zu erinnern.

Dieser Standardpfad kann auch wie folgt geändert werden:

.rememberMe().rememberMeParameter("remember-me-new")

4. Das Cookie

Der Mechanismus erstellt ein zusätzliches Cookie - das "Remember-Me" -Cookie -, wenn sich der Benutzer anmeldet.

Das Remember Me-Cookie enthält die folgenden Daten:

  • Benutzername - um den angemeldeten Principal zu identifizieren
  • expirationTime - um das Cookie abzulaufen; Standard ist 2 Wochen
  • MD5-Hash - der vorherigen 2 Werte - Benutzername und Ablaufzeit sowie das Kennwort und der vordefinierte Schlüssel

Das Erste, was hier zu beachten ist, ist, dass sowohl der Benutzername als auch das Passwort Teil des Cookies sind. Dies bedeutet, dass das Cookie bei einer Änderung nicht mehr gültig ist. Der Benutzername kann auch aus dem Cookie gelesen werden.

Darüber hinaus ist es wichtig zu verstehen, dass dieser Mechanismus möglicherweise anfällig ist, wenn das Erinnerungscookie erfasst wird. Das Cookie ist gültig und verwendbar, bis es abläuft oder die Anmeldeinformationen geändert werden.

5. In der Praxis

Um zu sehen, wie der Mechanismus zum Erinnern an mich funktioniert, können Sie:

  • Logge dich ein, erinnere dich an mich aktiv
  • Warten Sie, bis die Sitzung abgelaufen ist (oder entfernen Sie das JSESSIONID- Cookie im Browser).
  • Lade die Seite neu

Ohne mich aktiv zu erinnern, sollte der Benutzer nach Ablauf des Cookies zurück zur Anmeldeseite weitergeleitet werden . Wenn Sie sich an mich erinnern, bleibt der Benutzer jetzt mit Hilfe des neuen Tokens / Cookies angemeldet .

6. Fazit

Dieses Tutorial zeigte, wie die Remember Me-Funktionalität in der Sicherheitskonfiguration eingerichtet und konfiguriert wird, und beschrieb kurz, welche Art von Daten in das Cookie eingehen.

Die Implementierung finden Sie im Beispiel-Github-Projekt - dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.

Wenn das Projekt lokal ausgeführt wird, kann auf localhost auf die Datei login.html zugegriffen werden.