Keselamatan Musim Semi Ingatlah Saya

1. Gambaran keseluruhan

Tutorial ini akan menunjukkan cara mengaktifkan dan mengkonfigurasi fungsi Remember Me dalam aplikasi web dengan Spring Security. Menyiapkan aplikasi MVC dengan keselamatan dan log masuk borang sederhana telah dibincangkan.

Mekanisme ini dapat mengenal pasti pengguna dalam beberapa sesi - jadi perkara pertama yang perlu difahami ialah Ingat Saya hanya bermula selepas sesi tamat. Secara lalai, ini berlaku selepas 30 minit tidak aktif, tetapi masa tamat dapat dikonfigurasikan di web.xml .

Catatan: tutorial ini memberi tumpuan kepada pendekatan berasaskan kuki standard . Untuk pendekatan berterusan, lihat panduan Spring Security - Persistent Remember Me.

2. Konfigurasi Keselamatan

Mari lihat cara mengatur konfigurasi keselamatan 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 asas menggunakan rememberMe () kaedah adalah amat mudah manakala selebihnya sangat fleksibel melalui pilihan tambahan. Yang utama adalah penting di sini - ia adalah satu rahsia nilai peribadi untuk seluruh permohonan itu dan ia akan digunakan apabila menjana kandungan token.

Selain itu, masa token itu sah dapat dikonfigurasi dari lalai 2 minggu hingga - misalnya - satu hari menggunakan tokenValiditySeconds () :

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

Kita juga dapat melihat konfigurasi XML yang setara:

3. Borang Log Masuk

Borang log masuk serupa dengan yang kami gunakan untuk log masuk borang:


    
User:
Password:
Remember Me:

Perhatikan input kotak centang yang baru ditambahkan - pemetaan untuk mengingati saya . Input tambahan ini cukup untuk log masuk dengan ingat saya aktif.

Laluan lalai ini juga dapat diubah seperti berikut:

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

4. Kuki

Mekanisme ini akan membuat kuki tambahan - kuki "ingat-saya" - semasa pengguna log masuk.

The Remember Me cookie mengandungi data berikut:

  • nama pengguna - untuk mengenal pasti prinsipal yang dilog masuk
  • expiredTime - untuk tamat tempoh kuki; lalai adalah 2 minggu
  • MD5 hash - dari 2 nilai sebelumnya - nama pengguna dan masa tamat , ditambah kata laluan dan kunci yang telah ditentukan

Perkara pertama yang perlu diperhatikan di sini adalah bahawa nama pengguna dan kata laluan adalah sebahagian daripada kuki - ini bermaksud bahawa, jika salah satu diubah, kuki tidak lagi sah. Juga, nama pengguna boleh dibaca dari kuki.

Selain itu, penting untuk memahami bahawa mekanisme ini berpotensi rentan jika cookie ingat saya ditangkap. Kuki akan sah dan boleh digunakan sehingga habis atau kelayakan ditukar.

5. Dalam Amalan

Untuk melihat mekanisme ingat saya berfungsi dengan mudah, anda boleh:

  • log masuk dengan ingat saya aktif
  • tunggu sesi tamat (atau keluarkan kuki JSESSIONID di penyemak imbas)
  • muat semula halaman

Tanpa ingat saya aktif, setelah cookie tamat pengguna harus diarahkan kembali ke halaman log masuk . Dengan ingat saya, pengguna kini terus log masuk dengan bantuan token / kuki baru.

6. Kesimpulannya

Tutorial ini menunjukkan cara mengatur dan mengkonfigurasi fungsi Remember Me dalam konfigurasi keselamatan, dan menerangkan secara ringkas jenis data yang masuk ke dalam kuki.

Pelaksanaannya boleh didapati dalam contoh projek Github - ini adalah projek berasaskan Eclipse, jadi mudah untuk diimport dan dijalankan sebagaimana adanya.

Apabila projek dijalankan secara tempatan, login.html dapat diakses di localhost.