Rumah >pembangunan bahagian belakang >tutorial php >Pembangunan bahagian belakang Java: Membina API selamat berdasarkan OAuth2

Pembangunan bahagian belakang Java: Membina API selamat berdasarkan OAuth2

王林
王林asal
2023-06-17 10:37:471580semak imbas

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.

  1. Apakah itu OAuth2?

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.

  1. Proses OAuth2

Proses OAuth2 terdiri daripada langkah berikut:

  1. Pelanggan membuat permintaan kepada pelayan kebenaran, termasuk pengecam dan URI Diarahkan semula.
  2. Pelayan kebenaran mengesahkan identiti pelanggan dan memerlukan pemilik sumber membenarkan pelanggan mengakses sumbernya.
  3. Pemilik sumber membenarkan pelanggan untuk mengakses sumber mereka.
  4. Pelayan kebenaran mengeluarkan token akses kepada pelanggan.
  5. Pelanggan menggunakan token akses untuk meminta akses kepada sumber daripada pelayan sumber.
  6. Pelayan sumber mengesahkan bahawa token akses adalah sah dan menyediakan sumber tersebut.
  7. Bina API selamat berdasarkan OAuth2

Untuk membina API selamat, kita perlu melaksanakan langkah berikut:

  1. Buat pelayan OAuth2: Kita perlu mencipta OAuth2 Pelayan mengeluarkan token akses, mengesahkan pelanggan dan membenarkan permintaan.
  2. Mengkonfigurasi Spring Security: Spring Security ialah rangka kerja keselamatan dalam ekosistem Spring yang mengendalikan pengesahan dan kebenaran. Kami perlu mengkonfigurasi aliran pengesahan dan kebenaran OAuth2 untuk Spring Security.
  3. Buat klien: Kami perlu mencipta klien untuk meminta akses kepada pelayan sumber dan mendapatkan token akses daripada pelayan OAuth2.
  4. Buat pelayan sumber: Kami perlu mencipta pelayan sumber untuk menyimpan dan menyediakan sumber yang dilindungi.
  5. Sahkan token akses: Kami perlu mengesahkan sama ada token akses itu sah dalam pelayan sumber dan menyediakan sumber yang sepadan mengikut skop token.

Berikut ialah contoh OAuth2 berdasarkan rangka kerja Java dan Spring:

  1. Buat pelayan OAuth2:

@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);
}

}

  1. Konfigurasikan Spring Security:

@WeSecurity
@We Security
@WeSecurity
>@ EnableGlobalMethodSecurity(prePostEnabled = true)

kelas awam WebSecurityConfig melanjutkan WebSecurityConfigurerAdapter {

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();
}

}
  1. Buat pelanggan:

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;
}

}

    Buat pelayan sumber:
@RestController

ResourceController kelas awam {

@GetMapping("/resource")
public ResponseEntity<String> getResource() {
    return ResponseEntity.ok("resource");
}

}

    Sahkan token akses:
@Configuration

@EnableResourceServer
kelas awam ResourceServerConfig memanjangkan ResourceServerConfigurerAdapter {
rr

>

Ikhtisar
  1. Dalam artikel ini, kami memperkenalkan proses protokol OAuth2 dan memberikan contoh berdasarkan rangka kerja Java dan Spring. Dengan menggunakan OAuth2, kami boleh membina API yang lebih selamat dan melindungi maklumat sensitif pengguna daripada dibocorkan. Dalam pembangunan API, kita harus sentiasa memberi perhatian kepada keselamatan untuk melindungi data pengguna dan sumber aplikasi.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn