Spring Security Lembre-se de mim

Spring Security Lembre-se de mim

1. Visão geral

Este tutorial mostraráhow to enable and configure Remember Me functionality in a web application com Spring Security. A configuração dethe MVC application with security and a simple form login já foi discutida.

O mecanismo será capaz deidentify the user across multiple sessions - então a primeira coisa a entender é que Lembre-se de mim só é ativado emafter the session times out. Por padrão, isso acontece após 30 minutos de inatividade, mastimeout can be configured emweb.xml.

[.iframe-fluido] ##

2. A configuração de segurança

Vamos ver como definir a configuração de segurança usando 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")
            ;
    }
}

Como você pode ver,the basic configuration using the rememberMe() method é extremamente simples, embora permaneça muito flexível, embora com opções adicionais. Okey é importante aqui - é um segredo de valor privado para todo o aplicativo e será usado ao gerar o conteúdo do token.

Além disso, otime the token is valid can be configured do padrão de 2 semanas para - por exemplo - um dia usandotokenValiditySeconds():

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

Também podemos dar uma olhada na configuração XML equivalente:


    
    
    

    
    

    



    
        
            
            
        
    

3. O Formulário de Login

O formulário de login é semelhante athe one we used for form login:





    

Login

User:
Password:
Remember Me:

Observe o mapeamento de entradacheckbox recém-adicionado pararemember-me. Essa entrada adicionada é suficiente para efetuar login com a opção lembrar-me ativa.

Esse caminho padrão também pode ser alterado da seguinte maneira:

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

O mecanismo criará um cookie adicional - o cookie "lembrar-me" - quando o usuário efetuar login.

ORemember Me cookie contém os seguintes dados:

  • username - para identificar o principal conectado

  • expirationTime - para expirar o cookie; o padrão é 2 semanas

  • MD5 hash - dos 2 valores anteriores -usernameeexpirationTime, mais opassworde okey predefinido

A primeira coisa a notar aqui é que tantousernameepassword fazem parte do cookie - isso significa que, se algum for alterado, o cookie não é mais válido. Além disso, ousername pode ser lido do cookie.

Além disso, é importante entender que esse mecanismo é potencialmente vulnerável se o cookie de lembrar de mim for capturado. The cookie will be valid and usable até que expire ou as credenciais sejam alteradas.

5. Na prática

Para ver facilmente o mecanismo de lembrar de mim funcionando, você pode:

  • faça login com lembre-se de mim ativo

  • espere a sessão expirar (ou remova o cookieJSESSIONID no navegador)

  • recarregue a página

Sem lembrar de mim ativo, depois que o cookie expirar, o usuário deverá estarredirected back to the login page. Com lembre-se de mim, o usuário agorastays logged in com a ajuda do novo token / cookie.

6. Conclusão

Este tutorial mostrou como instalar e configurar a funcionalidade Remember Me na configuração de segurança e descreveu brevemente que tipo de dados entra no cookie.

A implementação pode ser encontrada emthe example github project - este é um projeto baseado em Eclipse, portanto, deve ser fácil de importar e executar como está.

Quando o projeto é executado localmente, ologin.html pode ser acessado emlocalhost.