Penyedia Pengesahan Keselamatan Spring

1. Gambaran keseluruhan

Tutorial ini akan menunjukkan cara mengatur Penyedia Autentikasi di Spring Security untuk membolehkan fleksibiliti tambahan berbanding dengan senario standard menggunakan UserDetailsService yang mudah .

2. Penyedia Pengesahan

Spring Security menyediakan pelbagai pilihan untuk melakukan pengesahan. Ini mengikut kontrak mudah - satu Pengesahan permintaan diproses oleh AuthenticationProvider dan objek disahkan sepenuhnya dengan kelayakan penuh dikembalikan.

Pelaksanaan standard dan paling biasa adalah DaoAuthenticationProvider - yang mengambil maklumat pengguna dari DAO pengguna yang mudah dibaca - UserDetailsService . Perkhidmatan Perincian Pengguna ini hanya mempunyai akses ke nama pengguna untuk mendapatkan entiti pengguna sepenuhnya. Ini cukup untuk kebanyakan senario.

Lebih banyak senario tersuai masih perlu mengakses permintaan Pengesahan sepenuhnya untuk dapat melakukan proses pengesahan. Sebagai contoh, apabila mengesahkan terhadap beberapa luaran, perkhidmatan pihak ketiga (seperti Crowd) - kedua-dua nama pengguna dan kata laluan dari permintaan pengesahan akan menjadi perlu .

Untuk ini, senario yang lebih maju, kita perlu menentukan Penyedia Pengesahan tersuai :

@Component public class CustomAuthenticationProvider implements AuthenticationProvider { @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String name = authentication.getName(); String password = authentication.getCredentials().toString(); if (shouldAuthenticateAgainstThirdPartySystem()) { // use the credentials // and authenticate against the third-party system return new UsernamePasswordAuthenticationToken( name, password, new ArrayList()); } else { return null; } } @Override public boolean supports(Class authentication) { return authentication.equals(UsernamePasswordAuthenticationToken.class); } }

Perhatikan bahawa pihak berkuasa yang diberikan pada objek Pengesahan yang dikembalikan kosong. Ini kerana pihak berkuasa tentu saja aplikasi khusus.

3. Daftarkan Pembekal Auth

Sekarang setelah kami menentukan Penyedia Pengesahan, kami perlu menentukannya dalam Konfigurasi Keamanan XML, menggunakan sokongan ruang nama yang tersedia:

4. Konfigurasi Java

Seterusnya, mari kita lihat konfigurasi Java yang sesuai:

@Configuration @EnableWebSecurity @ComponentScan("com.baeldung.security") public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomAuthenticationProvider authProvider; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(authProvider); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().authenticated() .and().httpBasic(); } }

5. Melakukan Pengesahan

Meminta Pengesahan dari Pelanggan pada dasarnya sama dengan atau tanpa penyedia pengesahan tersuai ini di bahagian belakang.

Mari gunakan perintah keriting sederhana untuk menghantar permintaan yang disahkan:

curl --header "Accept:application/json" -i --user user1:user1Pass //localhost:8080/spring-security-custom/api/foo/1

Untuk tujuan contoh ini, kami telah mengamankan REST API dengan Pengesahan Asas.

Dan kami mendapat kembali 200 OK yang diharapkan dari pelayan:

HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: JSESSIONID=B8F0EFA81B78DE968088EBB9AFD85A60; Path=/spring-security-custom/; HttpOnly Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Date: Sun, 02 Jun 2013 17:50:40 GMT

6. Kesimpulannya

Dalam artikel ini, kami membincangkan contoh penyedia pengesahan tersuai untuk Spring Security.

Pelaksanaan penuh tutorial ini boleh didapati dalam projek GitHub.