Rumah >pembangunan bahagian belakang >tutorial php >Pembangunan bahagian belakang Java: Membina API selamat berdasarkan OAuth2
OAuth2 ialah salah satu daripada protokol pengesahan dan kebenaran yang digunakan secara meluas dalam aplikasi moden. Ia membolehkan pengguna membenarkan aplikasi pihak ketiga untuk mengakses sumber mereka sambil melindungi maklumat sensitif pengguna daripada dibocorkan. Dalam artikel ini, kami akan memperkenalkan cara membina API selamat berdasarkan OAuth2 menggunakan pembangunan backend Java.
OAuth2 ialah protokol kebenaran popular yang direka untuk menyelesaikan masalah kebenaran antara aplikasi. Ia membenarkan pengguna membenarkan aplikasi pihak ketiga untuk mengakses sumber mereka, seperti akaun Google Drive atau Facebook, sambil melindungi kelayakan pengguna daripada dikompromi. OAuth2 mengandungi 4 peranan: pemilik sumber, klien, pelayan kebenaran dan pelayan sumber. Pemilik sumber ialah pengguna atau entiti dengan sumber yang dilindungi; klien ialah aplikasi yang meminta akses kepada sumber; pelayan yang menyimpan dan menyediakan sumber. OAuth2 mengeluarkan token melalui pelayan kebenaran dan pelanggan menggunakan token untuk meminta sumber daripada pelayan sumber.
Proses OAuth2 terdiri daripada langkah berikut:
Untuk membina API selamat, kita perlu melaksanakan langkah berikut:
Berikut ialah contoh OAuth2 berdasarkan rangka kerja Java dan Spring:
@EnableAuthorizationServer
@Configuration
kelas awam OAuth2AuthorizationConfig memanjangkan AuthorizationServerConfigurerAdapter {
private final PasswordEncoder passwordEncoder; private final AuthenticationManager authenticationManager; private final UserDetailsService userDetailsService; @Autowired public OAuth2AuthorizationConfig( PasswordEncoder passwordEncoder, AuthenticationManager authenticationManager, UserDetailsService userDetailsService ) { this.passwordEncoder = passwordEncoder; this.authenticationManager = authenticationManager; this.userDetailsService = userDetailsService; } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("client") .secret(passwordEncoder.encode("secret")) .authorizedGrantTypes("authorization_code") .scopes("read", "write", "trust") .redirectUris("http://localhost:8080/login/oauth2/code/"); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authenticationManager(authenticationManager) .userDetailsService(userDetailsService); }
}
@WeSecurity
@We Security
@WeSecurity
>@ EnableGlobalMethodSecurity(prePostEnabled = true)
private final UserDetailsService userDetailsService; private final PasswordEncoder passwordEncoder; @Autowired public WebSecurityConfig( UserDetailsService userDetailsService, PasswordEncoder passwordEncoder ) { this.userDetailsService = userDetailsService; this.passwordEncoder = passwordEncoder; } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService) .passwordEncoder(passwordEncoder); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/oauth/**").permitAll() .anyRequest().authenticated() .and() .oauth2Login(); }}
ClientController kelas awam {
private final OAuth2AuthorizedClientService authorizedClientService; @Autowired public ClientController(OAuth2AuthorizedClientService authorizedClientService) { this.authorizedClientService = authorizedClientService; } @GetMapping("/resource") public ResponseEntity<String> getResource(OAuth2AuthenticationToken authentication) { OAuth2AuthorizedClient authorizedClient = authorizedClientService.loadAuthorizedClient( authentication.getAuthorizedClientRegistrationId(), authentication.getName() ); HttpHeaders headers = new HttpHeaders(); headers.setBearerAuth(authorizedClient.getAccessToken().getTokenValue()); HttpEntity<String> entity = new HttpEntity<>(headers); ResponseEntity<String> response = new RestTemplate().exchange( "http://localhost:8081/resource", HttpMethod.GET, entity, String.class ); return response; }}
ResourceController kelas awam {
@GetMapping("/resource") public ResponseEntity<String> getResource() { return ResponseEntity.ok("resource"); }}
@EnableResourceServer
kelas awam ResourceServerConfig memanjangkan ResourceServerConfigurerAdapter {
rr
Atas ialah kandungan terperinci Pembangunan bahagian belakang Java: Membina API selamat berdasarkan OAuth2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!