Spring Security Remember Me

1. Vue d'ensemble

Ce didacticiel montrera comment activer et configurer la fonctionnalité Remember Me dans une application Web avec Spring Security. La configuration de l'application MVC avec la sécurité et une connexion par formulaire simple a déjà été discutée.

Le mécanisme sera capable d' identifier l'utilisateur sur plusieurs sessions - donc la première chose à comprendre est que Remember Me ne démarre qu'après l'expiration de la session. Par défaut, cela se produit après 30 minutes d'inactivité, mais le délai d'expiration peut être configuré dans le fichier web.xml .

Remarque: ce tutoriel se concentre sur l'approche standard basée sur les cookies . Pour l'approche persistante, consultez le guide Spring Security - Persistent Remember Me.

2. La configuration de sécurité

Voyons comment configurer la configuration de sécurité à l'aide de 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") ; } }

Comme vous pouvez le voir, la configuration de base utilisant la méthode RememberMe () est extrêmement simple tout en restant très flexible grâce à des options supplémentaires. La clé est importante ici - il s'agit d'un secret de valeur privée pour l'ensemble de l'application et il sera utilisé lors de la génération du contenu du jeton.

De plus, la durée de validité du jeton peut être configurée de la valeur par défaut de 2 semaines à, par exemple, un jour à l'aide de tokenValiditySeconds () :

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

Nous pouvons également jeter un œil à la configuration XML équivalente:

3. Le formulaire de connexion

Le formulaire de connexion est similaire à celui que nous avons utilisé pour la connexion par formulaire:


    
User:
Password:
Remember Me:

Remarquez la nouvelle entrée de case à cocher - mappage pour se souvenir de moi . Cette entrée ajoutée est suffisante pour se connecter avec Remember me active.

Ce chemin par défaut peut également être modifié comme suit:

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

4. Le cookie

Le mécanisme créera un cookie supplémentaire - le cookie «Remember-me» - lorsque l'utilisateur se connectera.

Le cookie Remember Me contient les données suivantes:

  • nom d'utilisateur - pour identifier le principal connecté
  • expirationTime - pour faire expirer le cookie; la valeur par défaut est de 2 semaines
  • Hachage MD5 - des 2 valeurs précédentes - nom d'utilisateur et expirationTime , plus le mot de passe et la clé prédéfinie

La première chose à noter ici est que le nom d'utilisateur et le mot de passe font partie du cookie - cela signifie que, si l'un ou l'autre est modifié, le cookie n'est plus valide. En outre, le nom d'utilisateur peut être lu à partir du cookie.

De plus, il est important de comprendre que ce mécanisme est potentiellement vulnérable si le cookie Remember me est capturé. Le cookie sera valide et utilisable jusqu'à ce qu'il expire ou que les informations d'identification soient modifiées.

5. En pratique

Pour voir facilement le fonctionnement du mécanisme Remember me, vous pouvez:

  • connectez-vous avec Remember me active
  • attendre l'expiration de la session (ou supprimer le cookie JSESSIONID dans le navigateur)
  • actualiser la page

Sans me souvenir de moi actif, après l'expiration du cookie, l'utilisateur doit être redirigé vers la page de connexion . Avec Remember me, l'utilisateur reste désormais connecté à l'aide du nouveau token / cookie.

6. Conclusion

Ce didacticiel a montré comment installer et configurer la fonctionnalité Remember Me dans la configuration de la sécurité et décrit brièvement le type de données entrant dans le cookie.

L'implémentation peut être trouvée dans l'exemple de projet Github - il s'agit d'un projet basé sur Eclipse, il devrait donc être facile à importer et à exécuter tel quel.

Lorsque le projet s'exécute localement, le login.html est accessible sur localhost.