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.