Keamanan Musim Semi Ingat Saya

1. Ikhtisar

Tutorial ini akan menunjukkan cara mengaktifkan dan mengkonfigurasi fungsionalitas Remember Me di aplikasi web dengan Spring Security. Menyiapkan aplikasi MVC dengan keamanan dan login formulir sederhana telah dibahas.

Mekanismenya akan dapat mengidentifikasi pengguna di beberapa sesi - jadi hal pertama yang harus dipahami adalah bahwa Remember Me hanya dijalankan setelah sesi habis waktu. Secara default, ini terjadi setelah 30 menit tidak aktif, tetapi waktu tunggu dapat dikonfigurasi di web.xml .

Catatan: tutorial ini berfokus pada pendekatan berbasis cookie standar . Untuk pendekatan persisten, lihat panduan Keamanan Musim Semi - Ingat Saya yang Persisten.

2. Konfigurasi Keamanan

Mari kita lihat cara mengatur konfigurasi keamanan menggunakan 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") ; } }

Seperti yang Anda lihat, konfigurasi dasar menggunakan rememberMe () metode ini sangat sederhana namun tetap sangat fleksibel melalui opsi tambahan. The kunci yang penting di sini - itu adalah nilai rahasia pribadi untuk seluruh aplikasi dan akan digunakan saat membuat isi token.

Selain itu, waktu token valid dapat dikonfigurasi dari default 2 minggu menjadi - misalnya - satu hari menggunakan tokenValiditySeconds () :

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

Kita juga bisa melihat konfigurasi XML yang setara:

3. Formulir Login

Formulir login mirip dengan yang kami gunakan untuk login formulir:


    
User:
Password:
Remember Me:

Perhatikan masukan kotak centang yang baru ditambahkan - pemetaan ke ingat-saya . Masukan tambahan ini cukup untuk masuk dengan ingat saya aktif.

Jalur default ini juga dapat diubah sebagai berikut:

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

4. Cookie

Mekanisme tersebut akan membuat cookie tambahan - cookie "ingat-saya" - saat pengguna login.

The Remember Me Cookie berisi data sebagai berikut:

  • nama pengguna - untuk mengidentifikasi kepala sekolah yang masuk
  • expirationTime - untuk mengakhiri cookie; defaultnya adalah 2 minggu
  • Hash MD5 - dari 2 nilai sebelumnya - nama pengguna dan waktu kedaluwarsa , ditambah sandi dan kunci yang ditentukan sebelumnya

Hal pertama yang harus diperhatikan di sini adalah nama pengguna dan kata sandi adalah bagian dari cookie - ini berarti, jika salah satu dari mereka diubah, cookie tidak lagi valid. Selain itu, nama pengguna dapat dibaca dari cookie.

Selain itu, penting untuk dipahami bahwa mekanisme ini berpotensi rentan jika kuki ingat saya ditangkap. Cookie akan valid dan dapat digunakan hingga kedaluwarsa atau kredensial diubah.

5. Dalam Praktek

Untuk melihat dengan mudah mekanisme ingat saya berfungsi, Anda dapat:

  • masuk dengan ingat saya aktif
  • tunggu sesi berakhir (atau hapus cookie JSESSIONID di browser)
  • segarkan halaman

Tanpa ingat saya aktif, setelah cookie berakhir pengguna harus diarahkan kembali ke halaman login . Dengan ingat saya, pengguna sekarang tetap masuk dengan bantuan token / cookie baru.

6. Kesimpulan

Tutorial ini menunjukkan cara mengatur dan mengkonfigurasi fungsionalitas Remember Me dalam konfigurasi keamanan, dan menjelaskan secara singkat jenis data apa yang masuk ke dalam cookie.

Implementasinya dapat ditemukan di contoh proyek Github - ini adalah proyek berbasis Eclipse, jadi semestinya mudah untuk mengimpor dan menjalankannya apa adanya.

Ketika proyek berjalan secara lokal, login.html dapat diakses di localhost.