Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tutorial ini menunjukkan kepada Anda cara mengaktifkan perlindungan REST API dengan Microsoft Entra ID dalam aplikasi Spring Boot.
Artikel ini menggunakan sistem survei sebagai contoh. Sistem survei menyediakan REST API berikut:
-
GET /api/survey/questionadalah untuk melihat survei. -
POST /api/surveyadalah untuk mengisi survei. -
GET /api/surveyadalah untuk melihat hasil survei.
Dalam artikel ini, Anda melindungi API ini dengan menerapkan kontrol akses berbasis peran (RBAC) untuk menerapkan persyaratan berikut:
-
GET /api/survey/questiontersedia untuk setiap permintaan. -
POST /api/surveytersedia untuk permintaan pengguna terautentikasi yang berisi token akses dengan cakupanSCOPE_Survey.Useryang diberikan. -
GET /api/surveytersedia untuk permintaan pengguna admin terautentikasi yang berisi token akses dengan cakupanSCOPE_Survey.Adminyang diberikan.
Prasyarat
- Langganan Azure - buat langganan secara gratis.
- Java Development Kit (JDK) versi 8 atau yang lebih tinggi.
- Apache Maven
- Azure CLI
- Instans Microsoft Entra. Untuk petunjuk tentang membuatnya, lihat Quickstart: Membuat penyewa baru di Microsoft Entra ID.
- Aplikasi Spring Boot. Jika Anda tidak memilikinya, buat proyek Maven dengan Spring Initializr. Pastikan untuk memilih Maven Project dan, di bawah Dependensi, tambahkan Spring Web, OAuth2 Resource Server, dan Microsoft Entra ID dependensi, lalu pilih Java versi 8 atau yang lebih tinggi.
Penting
Spring Boot versi 2.5 atau yang lebih tinggi diperlukan untuk menyelesaikan langkah-langkah dalam artikel ini.
Mendaftarkan REST API
Gunakan langkah-langkah berikut untuk mendaftarkan API web Anda di portal Azure.
Masuk ke portal Azure.
Jika Anda memiliki akses ke beberapa penyewa, gunakan filter Direktori + langganan (
) untuk memilih penyewa tempat Anda ingin mendaftarkan aplikasi.Temukan dan pilih Microsoft Entra ID.
Di bawah Kelola, pilih Pendaftaran aplikasi>Pendaftaran baru.
Masukkan nama untuk aplikasi Anda di bidang Nama , misalnya
Api-SurveyService. Pengguna aplikasi Anda mungkin melihat nama ini, dan Anda dapat mengubahnya nanti.Untuk Jenis akun yang didukung, pilih Akun di direktori organisasi apa pun.
Pilih Daftar untuk membuat aplikasi.
Pada halaman Gambaran Umum aplikasi, cari nilai ID Aplikasi (klien), lalu catat untuk digunakan nanti. Anda memerlukannya untuk mengonfigurasi file konfigurasi YAML untuk proyek ini.
Di bawah Kelola, pilih Ekspos API>Tambahkan cakupan. Terima URI ID Aplikasi yang diusulkan (
api://{clientId}) dengan memilih Simpan dan lanjutkan, lalu masukkan informasi berikut:- Untuk Nama cakupan, masukkan
Survey.User. - Untuk Siapa yang dapat menyetujui, pilih Admin dan pengguna .
- Untuk Nama tampilan persetujuan admin, masukkan
Access the survey service as a user.. - Untuk deskripsi persetujuan Admin , masukkan
Allows the users to write data in survey system.. - Untuk nama tampilan persetujuan pengguna, masukkan
Access the survey service as a user.. - Untuk deskripsi persetujuan pengguna , masukkan
Allows the users to write data in survey system.. - Untuk Status, tetap Aktifkan.
- Pilih Tambahkan cakupan.
- Untuk Nama cakupan, masukkan
Ulangi langkah sebelumnya untuk menambahkan cakupan lain. Saat Anda memilih Tambahkan cakupan, masukkan informasi berikut:
- Untuk Nama cakupan, masukkan
Survey.Admin. - Untuk Siapa yang dapat menyetujui, pilih Admin dan pengguna .
- Untuk Nama tampilan persetujuan admin, masukkan
Access the survey service as a admin.. - Untuk deskripsi persetujuan Admin , masukkan
Allows the users to view data in survey system.. - Untuk nama tampilan persetujuan pengguna, masukkan
Access the survey service as a admin.. - Untuk deskripsi persetujuan pengguna , masukkan
Allows the users to view data in survey system.. - Untuk Status, tetap Aktifkan.
- Pilih Tambahkan cakupan.
- Untuk Nama cakupan, masukkan
Mengaktifkan Microsoft Entra ID Spring Cloud Azure Starter
Selanjutnya, aktifkan perlindungan REST API dengan Spring Cloud Azure.
Menambahkan dependensi Keamanan
Untuk menginstal modul Azure Active Directory Spring Cloud Azure Starter, tambahkan dependensi berikut ke file pom.xml Anda:
Daftar Komponen Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Nota
Jika Anda menggunakan Spring Boot 4.0.x, atur versi ke
spring-cloud-azure-dependencies7.4.0.Jika Anda menggunakan Spring Boot 3.5.x, atur versi ke
spring-cloud-azure-dependencies6.5.0.Jika Anda menggunakan Spring Boot 3.1.x-3.5.x, pastikan untuk mengatur versi ke
spring-cloud-azure-dependencies5.25.0.Jika Anda menggunakan Spring Boot 2.x, pastikan untuk mengatur versi
spring-cloud-azure-dependencieske4.20.0.Bill of Material (BOM) ini harus dikonfigurasi di bagian
<dependencyManagement>dari file pom.xml Anda. Ini memastikan bahwa semua dependensi Spring Cloud Azure menggunakan versi yang sama.Untuk informasi selengkapnya tentang versi yang digunakan untuk BOM ini, lihat Versi Spring Cloud Azure Harus Saya Gunakan.
Artefak Spring Cloud Azure Starter dari Microsoft Entra:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory</artifactId> </dependency>Artefak Server Sumber Daya Spring Boot Starter OAuth2:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
Mengotorisasi permintaan HTTP
Untuk melindungi REST API survei, tambahkan anotasi @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") dengan nama cakupan konkret untuk mengaktifkan perlindungan, seperti yang ditunjukkan dalam contoh berikut:
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.LinkedHashMap;
import java.util.Map;
@RestController
@RequestMapping("/api/survey")
public class SurveyController {
private static final String QUESTION = "Which sports do you like most?";
private final Map<LocalDateTime, String> surveys = new LinkedHashMap<>();
@GetMapping(value = "/question", produces = MediaType.APPLICATION_JSON_VALUE)
public String question() {
return QUESTION;
}
@PostMapping
@PreAuthorize("hasAuthority('SCOPE_Survey.User')")
public String addAnswer(@RequestParam("answer") String answer) {
if (StringUtils.hasText(answer)) {
surveys.put(LocalDateTime.now(), answer);
return "succeeded";
}
return "Failed";
}
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("hasAuthority('SCOPE_Survey.Admin')")
public Map<LocalDateTime, String> list() {
return surveys;
}
}
Perbarui konfigurasi YAML seperti yang ditunjukkan dalam contoh berikut:
spring:
cloud:
azure:
active-directory:
enabled: true
credential:
client-id: <your-application-ID-of-Api-SurveyService>
app-id-uri: <your-application-ID-URI-of-Api-SurveyService>
Nota
Dalam token v1.0, konfigurasi memerlukan ID klien API, sementara dalam token v2.0, Anda dapat menggunakan ID klien atau URI ID aplikasi dalam permintaan. Anda dapat mengonfigurasi keduanya untuk menyelesaikan validasi audiens dengan benar.
Menyebarkan ke Azure Spring Apps
Setelah aplikasi Spring Boot berjalan secara lokal, Anda dapat memindahkannya ke produksi. Azure Spring Apps memudahkan penyebaran aplikasi Spring Boot ke Azure tanpa perubahan kode apa pun. Layanan ini mengelola infrastruktur aplikasi Spring sehingga pengembang dapat fokus pada kode mereka. Azure Spring Apps menyediakan manajemen siklus hidup menggunakan pemantauan dan diagnostik yang komprehensif, manajemen konfigurasi, penemuan layanan, integrasi CI/CD, penyebaran biru-hijau, dan banyak lagi. Untuk informasi selengkapnya, lihat Quickstart: Menyebarkan aplikasi pertama Anda ke Azure Spring Apps.