Spring Security Ricordami

1. Panoramica

Questo tutorial mostrerà come abilitare e configurare la funzionalità Ricordami in un'applicazione web con Spring Security. La configurazione dell'applicazione MVC con sicurezza e un semplice modulo di accesso è già stata discussa.

Il meccanismo sarà in grado di identificare l'utente in più sessioni , quindi la prima cosa da capire è che Remember Me si attiva solo dopo il timeout della sessione. Per impostazione predefinita, ciò avviene dopo 30 minuti di inattività, ma il timeout può essere configurato nel file web.xml .

Nota: questo tutorial si concentra sull'approccio standard basato sui cookie . Per l'approccio persistente, dai un'occhiata alla guida Spring Security - Persistent Remember Me.

2. La configurazione della sicurezza

Vediamo come impostare la configurazione della sicurezza utilizzando Java:

@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") ; } }

Come puoi vedere, la configurazione di base utilizzando il metodo RememberMe () è estremamente semplice pur rimanendo molto flessibile attraverso opzioni aggiuntive. La chiave è importante qui: è un valore segreto privato per l'intera applicazione e verrà utilizzata durante la generazione del contenuto del token.

Inoltre, il tempo di validità del token può essere configurato dal valore predefinito di 2 settimane a, ad esempio, un giorno utilizzando tokenValiditySeconds () :

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

Possiamo anche dare un'occhiata alla configurazione XML equivalente:

3. Il modulo di accesso

Il modulo di accesso è simile a quello che abbiamo usato per il modulo di accesso:


    
User:
Password:
Remember Me:

Si noti la appena aggiunto casella di input - mappatura per ricordare-me . Questo input aggiuntivo è sufficiente per accedere con la funzione Ricordami attivo.

Questo percorso predefinito può anche essere modificato come segue:

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

4. Il cookie

Il meccanismo creerà un cookie aggiuntivo - il cookie "ricordami" - quando l'utente accede.

Il cookie Remember Me contiene i seguenti dati:

  • nome utente : per identificare l'entità che ha eseguito l'accesso
  • expirationTime - per far scadere il cookie; il valore predefinito è 2 settimane
  • Hash MD5 - dei 2 valori precedenti - username e expirationTime , più la password e la chiave predefinita

La prima cosa da notare qui è che sia il nome utente che la password fanno parte del cookie: ciò significa che, se vengono modificati, il cookie non è più valido. Inoltre, il nome utente può essere letto dal cookie.

Inoltre, è importante capire che questo meccanismo è potenzialmente vulnerabile se il cookie ricordami viene acquisito. Il cookie sarà valido e utilizzabile fino alla sua scadenza o fino alla modifica delle credenziali.

5. In pratica

Per vedere facilmente il funzionamento del meccanismo ricordami, puoi:

  • accedi con ricordami attivo
  • attendere la scadenza della sessione (o rimuovere il cookie JSESSIONID nel browser)
  • ricarica la pagina

Senza ricordami attivo, una volta scaduto il cookie l'utente dovrebbe essere reindirizzato alla pagina di login . Con ricordami, l'utente ora rimane connesso con l'aiuto del nuovo token / cookie.

6. Conclusione

Questo tutorial ha mostrato come impostare e configurare la funzionalità Ricordami nella configurazione della sicurezza e ha descritto brevemente il tipo di dati da inserire nel cookie.

L'implementazione può essere trovata nel progetto Github di esempio: questo è un progetto basato su Eclipse, quindi dovrebbe essere facile da importare ed eseguire così com'è.

Quando il progetto viene eseguito in locale, è possibile accedere a login.html su localhost.