Mempersiapkan Sertifikasi Spring Profesional. Keamanan musim semi

Artikel ini adalah terjemahan dari artikel Persiapan Sertifikasi Profesional Spring .


Ini akan mencakup topik Keamanan Musim Semi dan pertanyaan utama di atasnya.


Ini juga dapat digunakan untuk mempersiapkan wawancara.


↓ Artikel lain tersedia di tautan di daftar isi ↓


Daftar isi
  1. Ketergantungan injeksi, wadah, IOC, kacang
  2. AOP (pemrograman berorientasi aspek)
  3. JDBC, Transaksi, JPA, Data Musim Semi
  4. Boot musim semi
  5. Musim semi mvc
  6. Keamanan musim semi
  7. SISA
  8. Pengujian




Pertanyaan sendiri:


Apa itu otentikasi dan otorisasi?

Otentikasi adalah proses memverifikasi pengguna sistem komputer.
Inilah yang terjadi di Spring:


  1. Kata sandi dan nama pengguna yang dihasilkan dikonversi ke instance UsernamePasswordAuthenticationToken . Ini mengimplementasikan antarmuka Otentikasi .
  2. Token diteruskan ke objek AuthenticationManager untuk verifikasi
  3. Jika berhasil, AM mengembalikan objek Authentication terisi
  4. Konteks keamanan diatur dengan memanggil SecurityContextHolder.getContext().setAuthentication(...)

Otorisasi adalah proses memverifikasi bahwa pengguna memiliki peran yang diperlukan untuk mengambil tindakan. Selama otorisasi, diperiksa apakah Anda memiliki hak yang sesuai untuk mengakses sumber daya.


Proses:


  1. Oleh prinsipal (prinsipal) pengguna, perannya ditampilkan
  2. Peran pengguna diperiksa terhadap peran sumber daya

Pertama, otentikasi terjadi, dan kemudian otentikasi.


Bagaimana keamanan bekerja secara internal?
  • Menggunakan proxy Spring AOP yang mewarisi dari kelas AbstractSecurityInterceptor.


    Ini digunakan untuk metode yang memanggil otorisasi.


  • Infrastruktur web keamanan didasarkan pada filter servlet.



Langkah pertama adalah mengkonfigurasi filter DelegatingFilterProxy . Dia mendelegasikan permintaan ke FilterChainProxy .


FilterChainProxy adalah kacang yang menerima satu atau lebih SecurityFilterChain di konstruktor.


SeccurityFilterChain membandingkan URL dalam permintaan dengan daftar filter.



Fitur Utama Yang Terlibat dalam Keamanan Musim Semi

SecurityContextHolder - berisi dan menyediakan akses ke SecurityContext dalam aplikasi.


SecurityContext - implementasi default Spring Security yang berisi objek Otentikasi.


Authentication - menyediakan token untuk permintaan otentikasi atau untuk kepala sekolah yang telah diautentikasi. Ini juga berisi daftar wewenang yang bisa diakses kepala sekolah.


GrantedAuthority - Berisi wewenang yang diberikan kepada prinsipal yang GrantedAuthority .


UserDetails - berisi informasi tentang pengguna: kata sandi, login, izin. Informasi ini digunakan untuk membuat objek Otentikasi setelah otentikasi berhasil.


UserDetailsService - layanan ini mengambil informasi tentang pengguna dari repositori (memori program, database, dll.) Dan memasukkannya ke dalam UserDetails.


Apakah yang dimaksud dengan filter proxy delegasi?

Kelas DelegatingFilterProxy adalah kelas yang mengimplementasikan antarmuka javax.Servlet.Filter .


Ini adalah filter khusus yang mendelegasikan pekerjaan ke kacang lain, yang juga merupakan filter.


Apakah rantai filter keamanan itu?

Rantai filter mengimplementasikan antarmuka SecurityFilterChain . Implementasi yang disediakan oleh Spring Security adalah DefaultSecurityFilterChain.


Konstruktor DSFC menerima beberapa parameter. Parameter pertama adalah pencocokan permintaan. Parameter yang tersisa adalah filter yang mengimplementasikan antarmuka servlet.Filter. Berikut ini semua filter yang diterima oleh DSFC:


  • ChannelProcessingFilter
  • SecurityContextPersistenceFilter
  • ConcurrentSessionFilter
  • Auth apapun. filter: UserNamePasswordAuthenticationFilter / CasAythenticationFilter / BasicAuthenticationFilter
  • SecurityContextHolderAwareRequestFilter
  • JaasApiIntegrationFilter
  • RemeberMeAuthenticationFilter
  • AnonymusAuthenticationFilter
  • ExceptionTranslationFilter
  • FilterSecurityInterceptor

Apa itu konteks keamanan?

Objek utama adalah SecurityContextHolder . Ini adalah tempat di mana rincian tentang konteks keamanan saat ini disimpan, misalnya, rincian kepala sekolah yang saat ini menggunakan aplikasi. Secara default, ThreadLocal digunakan untuk penyimpanan.


 // SecurityContext SecurityHolderContext.getContext() 

Objek yang dikembalikan oleh metode getContext() adalah SecurityContext . Ini memungkinkan Anda untuk menerima dan mengatur objek Authentication .


Authentication mewakili properti berikut:


  • Pengumpulan kekuasaan yang diberikan kepada kepala sekolah
  • Data untuk identifikasi pengguna (login, kata sandi)
  • Detail - tambahkan. informasi, jika diperlukan. Mungkin nol
  • Kepala sekolah
  • Bendera autentikasi - variabel boolean yang menunjukkan apakah kepala sekolah berhasil lulus tes

Bagaimana cara mengatur intersepsi klik pengguna pada URL tertentu?
 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() //    /resources .antMatchers("/resources/**").permitAll() //      2  .antMatchers("/").hasAnyRole("ANONYMOUS", "USER") .antMatchers("/login)*").hasAnyRole("ANONYMOUS", "USER") .antMatchers("/logoutr").hasAnyRole("ANONYMOUS", "USER") //      ADMIN .antMatchers("iadmin/*").hasRole("ADMIN") .antMatchers("/events/").hasRole("ADMIN") } 

Apa yang dimaksud * dalam metode antMatcher dan mvcMatchers ()?

Ungkapan ini berarti "apa saja."


Ada 2 jenis:


  • * - memotong hanya pada tingkat di mana ia digunakan.


    Misalnya, pola "/ pesanan / *" akan memeriksa hak-hak pengguna jika pengguna mengikuti


    / order / alien atau / order / 1, tapi tidak / order / alien / 1.


  • ** - memotong di semua level.
    Setiap permintaan akan diperiksa, / order / alien, / order / 1, / order / alien / 1.



Mengapa mvcMatcher lebih aman daripada antMatcher?

Karena antMatcher(“/service”) memetakan jalur permintaan hanya ke “/service” , sedangkan mvcMatcher(“/service”) memetakan ke “/service” , “/service.html” , "/service.abc" .


Apakah Spring mendukung hashing kata sandi? Apa itu garam?

Ya, benar. Ada antarmuka PasswordEncoder untuk hashing, yang hanya berisi satu metode:


static PasswordEncoder createDelegatingPasswordEncoder() , yang mengembalikan DelegatePasswordEncoder default.


Garam digunakan untuk menghitung nilai hash kata sandi. Ini adalah urutan angka acak yang digunakan untuk mengubah kata sandi teks menjadi hash. Garam disimpan dalam bentuk yang jelas di sebelah kata sandi hash dan dapat digunakan nanti ketika mengubah kata sandi bersih menjadi hash dengan login pengguna baru.


Mengapa Anda membutuhkan perlindungan untuk metode? Bagaimana cara menginstalnya?

Spring Security mendukung perlindungan metode individual dalam kacang (misalnya, dalam pengontrol). Ini adalah lapisan perlindungan tambahan untuk aplikasi.


Itu harus ditentukan secara eksplisit menggunakan anotasi @EnableGlobalMethodSecurity .


Apa yang dilakukan oleh anotasi @RolesAllowed?

Anotasi ini didasarkan pada JSR-250.
@RolesAllowed memungkinkan Anda untuk mengkonfigurasi akses ke metode (misalnya, di kelas controller) menggunakan peran.
Contoh: @RolesAllowed(“ADMIN”) hanya akan memungkinkan pengguna dengan peran ADMIN


Untuk menggunakan, Anda perlu mengatur @EnableGlobalMethodSecurity(jsr250Enabled=true) pada kelas @Configuration + Anda perlu anotasi ini berada di classpath.


Beritahu kami tentang @PreAuthorize

@PreAuthorize memungkinkan Anda mengonfigurasi akses ke metode menggunakan SpEL.
Untuk menggunakan, Anda perlu mengatur @EnableGlobalMethodSecurity(prePostEnabled=true)


Bagaimana semua anotasi ini diterapkan?

Fungsionalitas ujung ke ujung digunakan menggunakan Spring AOP (objek proxy).

Source: https://habr.com/ru/post/id470786/


All Articles