Spring Security Запомнить меня

Spring Security Запомнить меня

1. обзор

В этом руководстве будет отображатьсяhow to enable and configure Remember Me functionality in a web application с Spring Security. Настройкаthe MVC application with security and a simple form login уже обсуждалась.

Механизм сможетidentify the user across multiple sessions, поэтому первое, что нужно понять, это то, что «Запомнить меня» срабатывает только вafter the session times out. По умолчанию это происходит через 30 минут бездействия, ноtimeout can be configured находится вweb.xml.

[.iframe-fluid] ##

2. Конфигурация безопасности

Давайте посмотрим, как настроить конфигурацию безопасности с помощью 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")
            ;
    }
}

Как видите,the basic configuration using the rememberMe() method чрезвычайно прост, но при этом остается очень гибким за счет дополнительных опций. Здесь важенkey - это секрет частного значения для всего приложения, и он будет использоваться при генерации содержимого токена.

Кроме того,time the token is valid can be configured от 2 недель по умолчанию до, например, одного дня с использованиемtokenValiditySeconds():

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

Мы также можем взглянуть на эквивалентную конфигурацию XML:


    
    
    

    
    

    



    
        
            
            
        
    

3. Форма входа

Форма входа аналогичнаthe one we used for form login:





    

Login

User:
Password:
Remember Me:

Обратите внимание на недавно добавленный вводcheckbox - сопоставление сremember-me. Этого дополнительного входа достаточно, чтобы войти в систему, запомни меня активным

Этот путь по умолчанию также можно изменить следующим образом:

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

Механизм создаст дополнительный cookie-файл - cookie-файл «запомнить меня», когда пользователь входит в систему.

Remember Me cookie содержит следующие данные:

  • username - для идентификации залогиненного принципала

  • expirationTime - срок действия куки; по умолчанию 2 недели

  • MD5 hash - из двух предыдущих значений -username иexpirationTime, плюсpassword и предопределенныйkey

Первое, на что следует обратить внимание, это то, что какusername, так иpassword являются частью файла cookie - это означает, что, если какой-либо из них был изменен, cookie больше не действителен. Кроме того,username можно прочитать из файла cookie.

Кроме того, важно понимать, что этот механизм потенциально уязвим, если файл cookie Запомнить меня. The cookie will be valid and usable до истечения срока его действия или до изменения учетных данных.

5. На практике

Чтобы легко увидеть механизм «Помни меня», вы можете:

  • войти с помнить меня активным

  • дождитесь окончания сеанса (или удалите cookieJSESSIONID в браузере)

  • обновите страницу

Если не помнить, что я активен, по истечении срока действия cookie пользователь должен бытьredirected back to the login page. Помните меня, теперь пользовательstays logged in с помощью нового токена / файла cookie.

6. Заключение

В этом руководстве показано, как настроить и настроить функцию «Запомнить меня» в конфигурации безопасности, и кратко описано, какие данные попадают в файл cookie.

Реализацию можно найти вthe example github project - это проект на основе Eclipse, поэтому его должно быть легко импортировать и запускать как есть.

Когда проект выполняется локально, доступ кlogin.html можно получить наlocalhost.

Related