Spring Security Souviens-toi de moi

Printemps Sécurité Souviens-toi de moi

1. Vue d'ensemble

Ce didacticiel montrerahow to enable and configure Remember Me functionality in a web application avec Spring Security. La configuration dethe MVC application with security and a simple form login a déjà été discutée.

Le mécanisme sera capable deidentify the user across multiple sessions - donc la première chose à comprendre est que Remember Me ne démarre que dansafter the session times out. Par défaut, cela se produit après 30 minutes d'inactivité, maistimeout can be configured dans lesweb.xml.

[.iframe-fluid] ##

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,the basic configuration using the rememberMe() method est extrêmement simple tout en restant très flexible grâce à des options supplémentaires. Lekey est important 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, lestime the token is valid can be configured de la valeur par défaut de 2 semaines à - par exemple - un jour en utilisanttokenValiditySeconds():

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

Nous pouvons également examiner la configuration XML équivalente:


    
    
    

    
    

    



    
        
            
            
        
    

3. Le formulaire de connexion

Le formulaire de connexion est similaire àthe one we used for form login:





    

Login

User:
Password:
Remember Me:

Remarquez le mappage d'entréecheckbox nouvellement ajouté versremember-me. Cette entrée ajoutée est suffisante pour vous connecter avec Remember Me Active.

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

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

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

LeRemember Me cookie contient les données suivantes:

  • username - pour identifier le principal connecté

  • expirationTime - pour faire expirer le cookie; la valeur par défaut est de 2 semaines

  • MD5 hash - des 2 valeurs précédentes -username etexpirationTime, plus lespassword et leskey prédéfinis

La première chose à noter ici est que lesusername et lespassword font tous deux partie du cookie - cela signifie que, si l'un ou l'autre est modifié, le cookie n'est plus valide. De plus, lesusername peuvent être lus à 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é. The cookie will be valid and usable jusqu'à ce qu'il expire ou que les informations d'identification soient modifiées.

5. En pratique

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

  • connectez-vous avec souvenez-vous de moi actif

  • attendre l'expiration de la session (ou supprimer le cookieJSESSIONID dans le navigateur)

  • actualiser la page

Sans me souvenir de moi actif, après l'expiration du cookie, l'utilisateur doit êtreredirected back to the login page. Avec Remember me, l'utilisateur maintenantstays logged in avec l'aide du nouveau token / cookie.

6. Conclusion

Ce tutoriel a montré comment configurer et utiliser les fonctionnalités de Remember Me dans la configuration de la sécurité et décrit brièvement le type de données stockées dans le cookie.

L'implémentation se trouve dansthe example github project - 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, leslogin.html sont accessibles surlocalhost.