Spring Security - Persistent Remember Me

Spring Security - Persistent Erinnere dich an mich

1. Überblick

Dieser Artikel zeigt, wie SieRemember Me functionality in Spring Security einrichten - nicht mit dem Standard-Cookie-Ansatz, sondern mita more secure solution, using persistence.

Zur schnellen Einführung kann Spring so konfiguriert werden, dass Anmeldedaten zwischen Browsersitzungen gespeichert werden. Auf diese Weise können Sie sich bei einer Website anmelden und sich beim nächsten Besuch der Website automatisch wieder anmelden lassen (auch wenn Sie in der Zwischenzeit den Browser geschlossen haben).

2. Zwei "Remember Me" -Lösungen

Spring bietet zwei leicht unterschiedliche Implementierungen, um das Problem zu lösen. Beide verwendenUsernamePasswordAuthenticationFilter und verwenden Hooks, um die Implementierung vonRememberMeServicesaufzurufen.

Wir haben bereits die Standard-Remember-Me-Lösung mit nur einem Cookie ina previous article behandelt. Diese Lösung verwendete ein Cookie namensremember-me, das den Benutzernamen, die Ablaufzeit und den MD5-Hash mit dem Kennwort enthält. Da es einen Hash des Passworts enthält, istthis solution is potentially vulnerable, wenn das Cookie erfasst wird.

In diesem Sinne - werfen wir einen Blick auf den zweiten Ansatz - verwenden SiePersistentTokenBasedRememberMeServices, um die persistierten Anmeldeinformationen zwischen den Sitzungen in einer Datenbanktabelle zu speichern.

3. Voraussetzungen - Erstellen Sie die Datenbanktabelle

Zuerst - wir müssen die Anmeldeinformationen in der Datenbank haben - müssen wir eine Tabelle erstellen, um die Daten zu halten:

create table if not exists persistent_logins (
  username varchar_ignorecase(100) not null,
  series varchar(64) primary key,
  token varchar(64) not null,
  last_used timestamp not null
);

Dies istcreated automatically on startup über die folgende XML-Konfiguration (unter Verwendung einer speicherinternen H2-Datenbank):



    

Der Vollständigkeit halber wird hier die Art und Weise beschrieben, wie die Persistenz eingerichtet wird:

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-h2.properties" })
public class DatabaseConfig {

    @Autowired private Environment env;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
        dataSource.setUrl(env.getProperty("jdbc.url"));
        dataSource.setUsername(env.getProperty("jdbc.user"));
        dataSource.setPassword(env.getProperty("jdbc.pass"));
        return dataSource;
    }
}

[.iframe-fluid] ##

4. Die Spring-Sicherheitskonfiguration

Die erste Schlüsselkonfiguration ist die Remember-Me-HTTP-Konfiguration (beachten Sie die EigenschaftdataSource):


    ...
    

Als nächstes müssen wir die tatsächlichenRememberMeService undJdbcTokenRepository konfigurieren (wobei auch diedataSource) verwendet werden:



    
    
    




    
    




    
    

Wie bereits erwähnt, hat der StandardTokenBasedRememberMeServices das Hash-Benutzerpasswort im Cookie gespeichert.

Diese Lösung -PersistentTokenBasedRememberMeServices verwendetunique series identifier for the user. Dies identifiziert die anfängliche Anmeldung des Benutzers und bleibt jedes Mal konstant, wenn der Benutzer während dieser dauerhaften Sitzung automatisch angemeldet wird. Es enthält aucha random token, die jedes Mal neu generiert werden, wenn sich ein Benutzer über die dauerhaften Erinnerungsfunktionen anmeldet.

Diese Kombination aus zufällig generierten Serien und Token bleibt bestehen, sodass ein Brute-Force-Angriff sehr unwahrscheinlich ist.

6. In der Praxis

Um zu sehen, wie der Mechanismus zum Speichern von Nachrichten in einem Browser funktioniert, können Sie:

  1. Login mit Remember Me aktiv

  2. Schließen Sie den Browser

  3. Öffnen Sie den Browser erneut und kehren Sie zur gleichen Seite zurück. Aktualisierung.

  4. Sie werden weiterhin angemeldet sein

Without Remember Me active sollte der Benutzer nach Ablauf des Cookies zurück zur Anmeldeseite weitergeleitet werden. With remember me bleibt der Benutzer nun mit Hilfe des neuen Tokens / Cookies angemeldet.

Sie können die Cookies auch im Browser und die persistierten Daten in der Datenbank anzeigen (Hinweis: Möglicherweise möchten Sie hierfür von der eingebetteten H2-Implementierung wechseln).

7. Fazit

Dieses Tutorial zeigt, wie manset up and configure a database persisted Remember Me Token functionality macht. Es ist auch eine Fortsetzung des vorherigen Artikels, in dem diestandard Cookie Token based functionality besprochen wurden. Der Datenbankansatz ist sicherer, da die Kennwortdetails im Cookie nicht gespeichert werden. Allerdings ist etwas mehr Konfiguration erforderlich.

Die Implementierung dieses Spring Security REST-Lernprogramms finden Sie inthe github project - dies ist ein Eclipse-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.