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.
Artikel ini memperlihatkan kepada Anda cara membuat aplikasi Java dengan kemampuan masuk dengan menggunakan Spring Initializr dengan Spring Boot Starter untuk ID Microsoft Entra.
Dalam tutorial ini, Anda mempelajari cara:
- Membuat aplikasi Java menggunakan Spring Initializr
- Mengonfigurasi Azure Active Directory B2C
- Mengamankan aplikasi dengan kelas dan anotasi Spring Boot
- Membangun dan menguji aplikasi Java Anda
microsoft Entra ID adalah solusi identitas perusahaan skala cloud Microsoft. Azure Active Directory B2C melengkapi kumpulan fitur Microsoft Entra ID, memungkinkan Anda mengelola akses pelanggan, konsumen, dan warga ke aplikasi bisnis-ke-konsumen (B2C) Anda.
Prasyarat
- Langganan Azure. Jika Anda belum memilikinya, buat akun gratis sebelum memulai.
- Java Development Kit (JDK) yang didukung. Untuk informasi selengkapnya tentang JDK yang tersedia untuk digunakan saat mengembangkan di Azure, lihat dukungan Java di Azure dan Azure Stack.
- Apache Maven, versi 3.0 atau yang lebih tinggi.
Penting
Spring Boot versi 2.5 atau yang lebih tinggi diperlukan untuk menyelesaikan langkah-langkah dalam artikel ini.
Membuat aplikasi menggunakan Spring Initializr
Telusuri ke https://start.spring.io/.
Isi nilai sesuai dengan panduan ini. Label dan tata letak mungkin berbeda dari gambar yang ditunjukkan di sini.
- Di bawah Project, pilih Maven Project.
- Di bawah Bahasa, pilih Java.
- Di bagian Spring Boot, pilih 2.7.11.
- Di bawahGrup
, Artefak dan Nama masukkan nilai yang sama, menggunakan string deskriptif pendek. UI dapat secara otomatis mengisi beberapa bidang ini saat Anda mengetik. - Di Panel Dependensi , pilih Tambahkan Dependensi. Gunakan UI untuk menambahkan dependensi pada Spring Web dan Spring Security.
Nota
Spring Security 5.5.1, 5.4.7, 5.3.10 dan 5.2.11 telah dirilis untuk mengatasi laporan CVE berikut CVE-2021-22119: Serangan Penolakan Layanan dengan spring-security-oauth2-client. Jika Anda menggunakan versi yang lebih lama, silakan tingkatkan.
Pilih Hasilkan Proyek, lalu unduh proyek ke folder di komputer lokal Anda. Pindahkan file yang diunduh ke direktori bernama sesuai proyek Anda dan buka zip file. Tata letak file akan terlihat seperti berikut ini, dengan nilai yang Anda masukkan untuk Grup
menggantikan . . ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main │ ├── java │ │ └── yourProject │ │ └── yourProject │ │ └── YourProjectApplication.java │ └── resources │ ├── application.properties │ ├── static │ └── templates └── test └── java └── yourProject └── yourProject └── YourProjectApplicationTests.java
Membuat dan menginisialisasi instans Microsoft Entra
Membuat instans Direktori Aktif
Masuk ke https://portal.azure.com.
Pilih Buat sumber daya. Cari Azure Active Directory B2C.
Pilih Buat.
Pilih Buat Tenant Azure AD B2C baru.
Untuk nama organisasi
dan nama domain awal , berikan nilai yang sesuai, lalu pilih Buat .
Saat pembuatan Direktori Aktif selesai, pilih akun Anda di sudut kanan atas, pilih Beralih direktori, lalu pilih direktori yang dibuat. Anda akan diarahkan ke beranda penyewa baru. Kemudian cari
b2cdan pilih Azure AD B2C.
Menambahkan pendaftaran aplikasi untuk aplikasi Spring Boot Anda
Di panel Kelola, pilih pendaftaran aplikasi , lalu pilih Pendaftaran baru.
Di bidang Nama, masukkan nama aplikasi Anda, kemudian pilih Daftar.
Kembali ke panel Pengelolaan, pilih Pendaftaran Aplikasi, lalu pilih nama aplikasi yang Anda buat.
layar pendaftaran aplikasi dengan nama tampilan yang dipilih.
Pilih Autentikasi, lalu Tambahkan platform, kemudian Web. Atur URI Pengalihan ke
http://localhost:8080/login/oauth2/code/, lalu pilih Konfigurasikan.
Menambahkan rahasia aplikasi untuk aplikasi Anda
Pilih Sertifikat & rahasia, lalu Rahasia klien baru. Masukkan deskripsi rahasia Anda lalu pilih Tambahkan. Setelah Anda membuat rahasia, pilih ikon salin di samping nilai rahasia untuk menyalin nilai untuk digunakan nanti di artikel ini.
Nota
Apabila Anda meninggalkan bagian Sertifikat rahasia & kemudian kembali, Anda tidak akan dapat melihat nilai rahasia. Dalam hal ini, Anda harus membuat rahasia lain dan menyalinnya untuk digunakan di masa mendatang.
Terkadang, nilai rahasia yang dihasilkan mungkin berisi karakter yang bermasalah untuk dimasukkan dalam file application.yml, seperti garis miring terbalik atau backtick. Dalam hal ini, buang rahasia itu dan hasilkan yang lain.
Menambahkan alur pengguna
Navigasi ke halaman utama penyewa Anda. Di bagian Kebijakan
di panel kiri, pilih Alur pengguna , lalu pilihAlur pengguna baru .Anda sekarang akan meninggalkan tutorial ini, menjalankan tutorial lain, dan kembali ke tutorial ini setelah Selesai. Berikut adalah beberapa hal yang perlu diingat ketika Anda pergi ke tutorial lain.
- Mulailah dengan langkah yang meminta Anda untuk memilih alur pengguna baru.
- Ketika tutorial ini mengacu pada
webapp1, gunakan nilai yang Anda masukkan untuk Grup sebagai gantinya. - Saat Anda memilih klaim untuk dikembalikan dari proses alur, pastikan Nama Tampilan dipilih. Tanpa klaim ini, aplikasi yang dibangun dalam tutorial ini tidak akan berfungsi.
- Saat Anda diminta untuk menjalankan alur pengguna, URL pengalihan yang Anda tentukan sebelumnya belum aktif. Anda masih dapat menjalankan alur, tetapi pengalihan tidak akan berhasil diselesaikan. Ini diharapkan.
- Ketika Anda mencapai "Langkah berikutnya", kembali ke tutorial ini.
Ikuti semua langkah dalam Tutorial : Membuat alur pengguna di Azure Active Directory B2C untuk membuat alur pengguna untuk "pendaftaran dan masuk", "pengeditan profil" dan "reset kata sandi".
Azure AD B2C mendukung akun lokal serta penyedia identitas sosial. Untuk contoh membuat penyedia identitas GitHub, lihat Menyiapkan pendaftaran dan masuk dengan akun GitHub menggunakan Azure Active Directory B2C.
Mengonfigurasi dan mengkompilasi aplikasi Anda
Setelah membuat instans Azure AD B2C dan beberapa alur pengguna, Anda akan menyambungkan aplikasi Spring ke instans Azure AD B2C.
Dari baris perintah, cd ke dalam direktori di mana Anda meng-unzip file .zip yang Anda unduh dari Spring Initializr.
Navigasikan ke folder induk untuk proyek Anda, dan buka file proyek pom.xml Maven di editor teks.
Tambahkan dependensi untuk keamanan Spring OAuth2 ke pom.xml:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory-b2c</artifactId> <version>See Below</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>See Below</version> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> <version>See Below</version> </dependency>Untuk
spring-cloud-azure-starter-active-directory-b2c, gunakan versi terbaru yang tersedia. Anda mungkin dapat menggunakan mvnrepository.com untuk mencari informasi ini.Untuk
spring-boot-starter-thymeleaf, gunakan versi yang sesuai dengan versi Spring Boot yang Anda pilih di atas, misalnya2.3.4.RELEASE.Untuk
thymeleaf-extras-springsecurity5, gunakan versi terbaru yang tersedia. Anda mungkin dapat menggunakan mvnrepository.com untuk mencari informasi ini. Saat penulisan ini, versi terbaru adalah3.0.4.RELEASE.Simpan dan tutup file pom.xml.
- Verifikasi bahwa dependensi Anda sudah benar dengan menjalankan
mvn -DskipTests clean install. Jika Anda tidak melihatBUILD SUCCESS, pecahkan masalah dan atasi masalah sebelum melanjutkan.
- Verifikasi bahwa dependensi Anda sudah benar dengan menjalankan
Navigasikan ke folder src/main/resources
di proyek Anda dan buat file application.yml di editor teks.Tentukan pengaturan untuk pendaftaran aplikasi Anda menggunakan nilai yang Anda buat sebelumnya; misalnya:
spring: cloud: azure: active-directory: b2c: enabled: true base-uri: https://<your-tenant-initial-domain-name>.b2clogin.com/<your-tenant-initial-domain-name>.onmicrosoft.com/ credential: client-id: <your-application-ID> client-secret: '<secret-value>' login-flow: sign-up-or-sign-in logout-success-url: <your-logout-success-URL> user-flows: sign-up-or-sign-in: <your-sign-up-or-sign-in-user-flow-name> profile-edit: <your-profile-edit-user-flow-name> password-reset: <your-password-reset-user-flow-name> user-name-attribute-name: <your-user-name-attribute-name>Perhatikan bahwa nilai
client-secretdiapit dalam tanda kutip tunggal. Ini diperlukan karena nilai<secret-value>hampir pasti akan berisi beberapa karakter yang harus berada di dalam tanda kutip tunggal saat ada di dalam YAML.Nota
Pada penulisan ini, daftar lengkap nilai Integrasi Spring B2C Direktori Aktif yang tersedia untuk digunakan dalam application.yml adalah sebagai berikut:
spring: cloud: azure: active-directory: b2c: enabled: true base-uri: credential: client-id: client-secret: login-flow: logout-success-url: user-flows: sign-up-or-sign-in: profile-edit: # optional password-reset: # optional user-name-attribute-name:File application.yml tersedia di GitHub dalam sampel spring-cloud-azure-starter-active-directory-b2c: aad-b2c-web-application.
Simpan dan tutup file application.yml.
Buat folder bernama controller di src/main/java/<yourGroupId>/<yourGroupId>, mengganti
<yourGroupId>dengan nilai yang Anda masukkan untuk grup .Buat file Java baru bernama
WebController.java di folder pengontroldan buka di editor teks. Masukkan kode berikut, mengubah
yourGroupIddengan tepat, lalu simpan dan tutup file:package yourGroupId.yourGroupId.controller; import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class WebController { private void initializeModel(Model model, OAuth2AuthenticationToken token) { if (token != null) { final OAuth2User user = token.getPrincipal(); model.addAttribute("grant_type", user.getAuthorities()); model.addAllAttributes(user.getAttributes()); } } @GetMapping(value = "/") public String index(Model model, OAuth2AuthenticationToken token) { initializeModel(model, token); return "home"; } @GetMapping(value = "/greeting") public String greeting(Model model, OAuth2AuthenticationToken token) { initializeModel(model, token); return "greeting"; } @GetMapping(value = "/home") public String home(Model model, OAuth2AuthenticationToken token) { initializeModel(model, token); return "home"; } }Karena setiap metode dalam pengontrol memanggil
initializeModel(), dan metode tersebut memanggilmodel.addAllAttributes(user.getAttributes());, halaman HTML apa pun di src/main/resources/templates dapat mengakses salah satu atribut tersebut, seperti${name},${grant_type}, atau${auth_time}. Nilai yang dikembalikan dariuser.getAttributes()sebenarnya adalah klaimid_tokenuntuk autentikasi. Daftar lengkap klaim yang tersedia tercantum dalam token ID platform identitas Microsoft.Buat folder bernama keamanan di src/main/java/<yourGroupId>/<yourGroupId>, mengganti
yourGroupIddengan nilai yang Anda masukkan untuk Grup .Buat file Java baru bernama
WebSecurityConfiguration.java di folder keamanandan buka di editor teks. Masukkan kode berikut, mengubah
yourGroupIddengan tepat, lalu simpan dan tutup file:package yourGroupId.yourGroupId.security; import com.azure.spring.cloud.autoconfigure.aadb2c.AadB2cOidcLoginConfigurer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { private final AadB2cOidcLoginConfigurer configurer; public WebSecurityConfiguration(AadB2cOidcLoginConfigurer configurer) { this.configurer = configurer; } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest() .authenticated() .and() .apply(configurer) ; } }Salin file home.html dari sampel spring-cloud-azure-starter-active-directory-b2c: aad-b2c-web-application ke src/main/resources/templates, dan ganti
${your-profile-edit-user-flow}dan${your-password-reset-user-flow}dengan nama alur pengguna yang Anda buat sebelumnya.
Membuat dan menguji aplikasi Anda
Buka perintah dan ubah direktori ke folder tempat file pom.xml aplikasi Anda berada.
Bangun aplikasi Spring Boot Anda dengan Maven dan jalankan; misalnya:
Nota
Sangat penting bahwa waktu sesuai jam sistem di mana aplikasi spring boot lokal berjalan itu akurat. Sangat sedikit toleransi kemiringan jam saat menggunakan OAuth 2.0. Ketidakakuratan selama tiga menit dapat menyebabkan masuk gagal dengan kesalahan yang mirip dengan
[invalid_id_token] An error occurred while attempting to decode the Jwt: Jwt used before 2020-05-19T18:52:10Z. Pada saat penulisan ini, time.gov memiliki indikator seberapa jauh jam Anda dari waktu aktual. Aplikasi berhasil dijalankan dengan condong +0,019 detik.mvn -DskipTests clean package mvn -DskipTests spring-boot:runSetelah aplikasi Anda dibangun dan dimulai oleh Maven, buka
http://localhost:8080/di browser web; Anda harus diarahkan ke halaman masuk.
Pilih tautan dengan teks yang berkaitan dengan masuk ke akun. Anda harus dialihkan Azure AD B2C untuk memulai proses autentikasi.
Setelah berhasil masuk, Anda akan melihat sampel
home pagedari browser,
Pemecahan masalah
Bagian berikut ini menjelaskan cara mengatasi beberapa masalah yang mungkin Anda temui.
Nama atribut yang hilang dalam atribut
Saat menjalankan sampel, Anda mungkin mendapatkan pengecualian dengan pesan Missing attribute 'name' in attributes. Log untuk pengecualian ini akan terlihat mirip dengan output berikut:
java.lang.IllegalArgumentException: Missing attribute 'name' in attributes
at org.springframework.security.oauth2.core.user.DefaultOAuth2User.<init>(DefaultOAuth2User.java:67) ~[spring-security-oauth2-core-5.3.6.RELEASE.jar:5.3.6.RELEASE]
at org.springframework.security.oauth2.core.oidc.user.DefaultOidcUser.<init>(DefaultOidcUser.java:89) ~[spring-security-oauth2-core-5.3.6.RELEASE.jar:5.3.6.RELEASE]
at org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService.loadUser(OidcUserService.java:144) ~[spring-security-oauth2-client-5.3.6.RELEASE.jar:5.3.6.RELEASE]
at org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService.loadUser(OidcUserService.java:63) ~[spring-security-oauth2-client-5.3.6.RELEASE.jar:5.3.6.RELEASE]
Jika Anda mendapatkan kesalahan ini, periksa kembali alur kerja pengguna yang Anda buat di Tutorial : Membuat alur pengguna di Azure Active Directory B2C. Saat membuat alur kerja pengguna, untuk atribut dan klaim pengguna , pastikan untuk memilih atribut dan klaim untuk Nama Tampilan. Selain itu, pastikan untuk mengonfigurasi user-name-attribute-name dengan benar dalam file application.yml.
Masuk dengan perulangan ke titik akhir B2C
Masalah ini kemungkinan besar disebabkan oleh cookie yang tercemari untuk localhost. Bersihkan kuki untuk localhost dan coba lagi.
Ringkasan
Dalam tutorial ini, Anda membuat aplikasi web Java baru menggunakan starter Azure Active Directory B2C, mengonfigurasi penyewa Azure AD B2C baru, dan mendaftarkan aplikasi baru di dalamnya, lalu mengonfigurasi aplikasi Anda untuk menggunakan anotasi dan kelas Spring untuk melindungi aplikasi web.
Membersihkan sumber daya
Jika tidak lagi diperlukan, gunakan portal Microsoft Azure untuk menghapus sumber daya yang dibuat dalam artikel ini untuk menghindari biaya yang tidak terduga.
Langkah berikutnya
Untuk mempelajari selengkapnya tentang Spring dan Azure, lanjutkan ke pusat dokumentasi Spring on Azure.