Bagikan melalui


Mengamankan aplikasi Java Spring Boot menggunakan klaim grup dan grup

Artikel ini menunjukkan aplikasi web Java Spring Boot yang menggunakan pustaka klien Microsoft Entra ID Spring Boot Starter untuk Java untuk autentikasi, otorisasi, dan akuisisi token. Aplikasi ini menggunakan protokol OpenID Connect untuk memasukkan pengguna, dan membatasi akses ke halaman berdasarkan keanggotaan grup keamanan ID Microsoft Entra.

Diagram berikut menunjukkan topologi aplikasi:

Diagram that shows the topology of the app.Diagram yang menunjukkan topologi aplikasi.

Aplikasi klien menggunakan pustaka klien Microsoft Entra ID Spring Boot Starter untuk Java untuk memasukkan pengguna di penyewa ID Microsoft Entra dan mendapatkan token ID dari ID Microsoft Entra.

Token ID berisi klaim grup. Aplikasi memuat klaim ke dalam daftar Spring GrantedAuthorities untuk pengguna yang masuk. Nilai-nilai ini menentukan halaman mana yang diizinkan untuk diakses pengguna.

Untuk video yang mencakup skenario ini, lihat Menerapkan otorisasi di aplikasi Anda menggunakan peran aplikasi, grup keamanan, cakupan, dan peran direktori.

Prasyarat

  • JDK versi 15. Sampel ini dikembangkan pada sistem dengan Java 15, tetapi mungkin kompatibel dengan versi lain.
  • Maven 3
  • Paket Ekstensi Java untuk Visual Studio Code direkomendasikan untuk menjalankan sampel ini di Visual Studio Code.
  • Penyewa ID Microsoft Entra. Untuk informasi selengkapnya, lihat Mulai Cepat: Menyiapkan penyewa.
  • Akun pengguna di penyewa MICROSOFT Entra ID Anda. Sampel ini tidak berfungsi dengan akun Microsoft pribadi. Oleh karena itu, jika Anda masuk ke portal Azure dengan akun pribadi dan Anda tidak memiliki akun pengguna di direktori Anda, Anda perlu membuatnya sekarang.
  • Dua grup keamanan, bernama AdminGroup dan UserGroup, yang berisi pengguna atau pengguna yang ingin Anda tanda tangani dan uji sampel ini. Atau, Anda dapat menambahkan pengguna ke dua grup keamanan yang ada di penyewa Anda. Jika Anda memilih untuk menggunakan grup yang sudah ada, pastikan untuk memodifikasi konfigurasi sampel untuk menggunakan nama grup keamanan dan ID objek yang ada.
  • Visual Studio Code
  • Alat Azure untuk Visual Studio Code

Rekomendasi

  • Beberapa keakraban dengan Spring Framework.
  • Beberapa keakraban dengan terminal Linux/OSX.
  • jwt.ms untuk memeriksa token Anda.
  • Fiddler untuk memantau aktivitas jaringan dan pemecahan masalah Anda.
  • Ikuti Blog Microsoft Entra untuk tetap up-to-date dengan perkembangan terbaru.

Menyiapkan sampel

Bagian berikut menunjukkan kepada Anda cara menyiapkan aplikasi sampel.

Mengkloning atau mengunduh repositori sampel

Untuk mengkloning sampel, buka jendela Bash dan gunakan perintah berikut:

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/3-Authorization-II/groups

Atau, navigasikan ke repositori ms-identity-msal-java-samples , lalu unduh sebagai file .zip dan ekstrak ke hard drive Anda.

Penting

Untuk menghindari batasan panjang jalur file pada Windows, kloning atau ekstrak repositori ke direktori di dekat akar hard drive Anda.

Mendaftarkan aplikasi sampel dengan penyewa MICROSOFT Entra ID Anda

Ada satu proyek dalam sampel ini. Bagian berikut menunjukkan kepada Anda cara mendaftarkan aplikasi menggunakan portal Azure.

Pilih penyewa ID Microsoft Entra tempat Anda ingin membuat aplikasi

Untuk memilih penyewa Anda, gunakan langkah-langkah berikut:

  1. Masuk ke portal Azure.

  2. Jika akun Anda ada di lebih dari satu penyewa MICROSOFT Entra ID, pilih profil Anda di sudut portal Azure, lalu pilih Alihkan direktori untuk mengubah sesi Anda ke penyewa MICROSOFT Entra ID yang diinginkan.

Mendaftarkan aplikasi (java-spring-webapp-groups)

Untuk mendaftarkan aplikasi, gunakan langkah-langkah berikut:

  1. Navigasi ke portal Azure dan pilih MICROSOFT Entra ID.

  2. Pilih Pendaftaran Aplikasi di panel navigasi, lalu pilih Pendaftaran baru.

  3. Di halaman Daftarkan aplikasi yang muncul, masukkan informasi pendaftaran aplikasi berikut ini:

    • Di bagian Nama , masukkan nama aplikasi yang bermakna untuk ditampilkan kepada pengguna aplikasi - misalnya, java-spring-webapp-groups.
    • Di bawah Jenis akun yang didukung, pilih Hanya akun dalam direktori organisasi ini.
    • Di bagian Alihkan URI (opsional) , pilih Web di kotak kombo dan masukkan URI pengalihan berikut: http://localhost:8080/login/oauth2/code/.
  4. Pilih Daftar untuk membuat aplikasi.

  5. Pada halaman pendaftaran aplikasi, temukan dan salin nilai ID Aplikasi (klien) untuk digunakan nanti. Anda menggunakan nilai ini dalam file atau file konfigurasi aplikasi Anda.

  6. Pada halaman pendaftaran aplikasi, pilih Sertifikat & rahasia di panel navigasi untuk membuka halaman tempat Anda dapat membuat rahasia dan mengunggah sertifikat.

  7. Di bagian Rahasia klien, pilih Rahasia klien baru.

  8. Ketik deskripsi - misalnya, rahasia aplikasi.

  9. Pilih salah satu durasi yang tersedia: 6 bulan, 12 bulan, atau Kustom.

  10. Pilih Tambahkan. Nilai yang dihasilkan ditampilkan.

  11. Salin dan simpan nilai yang dihasilkan untuk digunakan di langkah selanjutnya. Anda memerlukan nilai ini untuk file konfigurasi kode Anda. Nilai ini tidak ditampilkan lagi, dan Anda tidak dapat mengambilnya dengan cara lain. Jadi, pastikan untuk menyimpannya dari portal Azure sebelum Anda menavigasi ke layar atau panel lain.

  12. Pada halaman pendaftaran aplikasi, pilih Izin API di panel navigasi untuk membuka halaman tempat Anda dapat menambahkan akses ke API yang dibutuhkan aplikasi Anda.

  13. Pilih Tambahkan izin.

  14. Pastikan bahwa tab API Microsoft dipilih.

  15. Di bagian Microsoft API yang umum digunakan, pilih Microsoft Graph.

  16. Di bagian Izin yang didelegasikan, pilih GroupMember.Read.All dari daftar. Gunakan kotak pencarian jika perlu. Izin ini diperlukan untuk mendapatkan keanggotaan grup melalui Grafik jika skenario kelebihan penggunaan terjadi.

  17. Pilih tombol untuk memberikan persetujuan admin untuk GroupMember.Read.All.

  18. Pilih Tambahkan izin.

Membuat grup keamanan

Untuk membuat grup keamanan, gunakan langkah-langkah berikut:

  1. Navigasi ke portal Azure dan pilih MICROSOFT Entra ID.

  2. Pilih Grup pada panel navigasi.

  3. Di panel Grup , pilih Grup Baru, lalu berikan informasi berikut ini:

    • Untuk Jenis Grup, pilih Keamanan.
    • Untuk Nama Grup, masukkan AdminGroup.
    • Untuk Deskripsi Grup, masukkan Grup Keamanan Admin.
    • Tambahkan Pemilik Grup dan Anggota Grup yang ingin Anda gunakan dan uji dalam sampel ini.
    • Pilih Buat.
  4. Di panel Grup , pilih Grup Baru, lalu berikan informasi berikut ini:

    • Untuk Jenis Grup, pilih Keamanan.
    • Untuk Nama Grup, masukkan UserGroup.
    • Untuk Deskripsi Grup, masukkan Grup Keamanan Pengguna.
    • Tambahkan Pemilik Grup dan Anggota Grup yang ingin Anda gunakan dan uji dalam sampel ini.
    • Pilih Buat.

Untuk informasi selengkapnya, lihat Mengelola grup Microsoft Entra dan keanggotaan grup.

Mengonfigurasi kelompok keamanan

Anda memiliki opsi berikut tentang bagaimana Anda dapat mengonfigurasi aplikasi Anda lebih lanjut untuk menerima klaim grup:

Catatan

Untuk mendapatkan ID grup samAccountName lokal atau On Premises Group Security Identifier alih-alih grup, lihat bagian Prasyarat untuk menggunakan atribut grup yang disinkronkan dari Direktori Aktif di Mengonfigurasi klaim grup untuk aplikasi dengan menggunakan ID Microsoft Entra.

Konfigurasikan aplikasi Anda untuk menerima semua grup tempat pengguna masuk ditetapkan, termasuk grup berlapis

Untuk mengonfigurasi aplikasi, gunakan langkah-langkah berikut:

  1. Pada halaman pendaftaran aplikasi, pilih Konfigurasi Token di panel navigasi untuk membuka halaman tempat Anda dapat mengonfigurasi token yang diberikan klaim yang dikeluarkan untuk aplikasi Anda.

  2. Pilih Tambahkan klaim grup untuk membuka layar Edit Klaim Grup.

  3. Pilih Grup keamanan ATAU Semua grup (termasuk daftar distribusi tetapi bukan grup yang ditetapkan ke aplikasi). Memilih keduanya meniadakan efek opsi Grup Keamanan.

  4. Di bawah bagian ID , pilih ID Grup. Pilihan ini menyebabkan MICROSOFT Entra ID mengirim ID objek grup yang ditetapkan pengguna dalam klaim grup token ID yang diterima aplikasi Anda setelah masuk ke pengguna.

Mengonfigurasi aplikasi Anda untuk menerima nilai klaim grup dari sekumpulan grup yang difilter yang mungkin ditetapkan pengguna

Opsi ini berguna ketika kasus berikut ini benar:

  • Aplikasi Anda tertarik pada sekumpulan grup yang dipilih tempat pengguna masuk dapat ditetapkan.
  • Aplikasi Anda tidak tertarik pada setiap grup keamanan yang ditetapkan pengguna ini di penyewa.

Opsi ini membantu aplikasi Anda menghindari masalah kelebihan penggunaan .

Catatan

Fitur ini tidak tersedia di edisi Microsoft Entra ID Free.

Penetapan grup berlapis tidak tersedia saat Anda menggunakan opsi ini.

Untuk mengaktifkan opsi ini di aplikasi Anda, gunakan langkah-langkah berikut:

  1. Pada halaman pendaftaran aplikasi, pilih Konfigurasi Token di panel navigasi untuk membuka halaman tempat Anda dapat mengonfigurasi token yang diberikan klaim yang dikeluarkan untuk aplikasi Anda.

  2. Pilih Tambahkan klaim grup untuk membuka layar Edit Klaim Grup.

  3. Pilih Grup yang ditetapkan ke aplikasi dan jangan pilih opsi lain. Jika Anda memilih opsi lainnya, seperti Grup Keamanan atau Semua grup (termasuk daftar distribusi tetapi bukan grup yang ditetapkan ke aplikasi), opsi ini meniadakan efek Grup yang ditetapkan ke opsi aplikasi.

  4. Di bawah bagian ID , pilih ID Grup. Pilihan ini menyebabkan MICROSOFT Entra ID mengirim ID objek grup yang ditetapkan pengguna dalam klaim grup token ID yang diterima aplikasi Anda setelah masuk ke pengguna.

  5. Jika Anda mengekspos API Web menggunakan opsi Ekspos API , maka Anda juga dapat memilih opsi ID Grup di bawah bagian Akses . Pilihan ini menyebabkan ID Microsoft Entra mengirim ID objek grup yang ditetapkan pengguna dalam klaim grup token akses yang dikeluarkan untuk aplikasi klien API Anda.

  6. Pada halaman pendaftaran aplikasi, pilih Gambaran Umum di panel navigasi untuk membuka layar Ringkasan aplikasi.

  7. Pilih hyperlink dengan nama aplikasi Anda di Aplikasi terkelola di direktori lokal. Judul bidang ini mungkin terpotong - misalnya, Aplikasi terkelola di .... Saat Anda memilih tautan ini, Anda menavigasi ke halaman Gambaran Umum Aplikasi Perusahaan yang terkait dengan perwakilan layanan untuk aplikasi Anda di penyewa tempat Anda membuatnya. Anda dapat menavigasi kembali ke halaman pendaftaran aplikasi dengan menggunakan tombol kembali browser Anda.

  8. Pilih Pengguna dan grup di panel navigasi untuk membuka halaman tempat Anda bisa menetapkan pengguna dan grup ke aplikasi Anda.

  9. Pilih Tambahkan Pengguna.

  10. Pilih Pengguna dan Grup dari layar yang dihasilkan.

  11. Pilih grup yang ingin Anda tetapkan ke aplikasi ini.

  12. Pilih Pilih untuk menyelesaikan pemilihan grup.

  13. Pilih Tetapkan untuk menyelesaikan proses penetapan grup.

    Aplikasi Anda sekarang menerima grup yang dipilih ini dalam klaim grup saat pengguna masuk ke aplikasi Anda adalah anggota dari satu atau beberapa grup yang ditetapkan ini.

  14. Pilih Properti pada panel navigasi untuk membuka halaman yang mencantumkan properti dasar aplikasi Anda. Atur bendera Penetapan pengguna yang diperlukan? ke Ya.

Penting

Saat Anda mengatur Penetapan pengguna diperlukan? ke Ya, MICROSOFT Entra ID memeriksa bahwa hanya pengguna yang ditetapkan ke aplikasi Anda di panel Pengguna dan grup yang dapat masuk ke aplikasi Anda. Anda dapat menetapkan pengguna secara langsung atau dengan menetapkan grup keamanan tempat mereka berada.


Konfigurasikan sampel kode Anda untuk menggunakan pendaftaran aplikasi dan grup keamanan Anda (java-spring-webapp-groups)

Gunakan langkah-langkah berikut untuk mengonfigurasi aplikasi:

Catatan

Dalam langkah-langkah berikut, ClientID sama dengan Application ID atau AppId.

  1. Buka proyek di IDE Anda.

  2. Buka file src\main\resources\application.yml.

  3. Temukan tempat penampung Enter_Your_Tenant_ID_Here dan ganti nilai yang ada dengan ID penyewa Microsoft Entra Anda.

  4. Temukan tempat penampung Enter_Your_Client_ID_Here dan ganti nilai yang ada dengan ID aplikasi atau clientId aplikasi yang java-spring-webapp-groups disalin dari portal Azure.

  5. Temukan tempat penampung Enter_Your_Client_Secret_Here dan ganti nilai yang ada dengan nilai yang Anda simpan selama pembuatan java-spring-webapp-groups yang disalin dari portal Azure.

  6. Temukan tempat penampung Enter_Your_Admin_Group_ID_Here dan ganti nilai yang ada dengan objectId nilai AdminGroup Anda.

  7. Temukan tempat penampung Enter_Your_User_Group_ID_Here dan ganti nilai yang ada dengan objectId nilai UserGroup Anda.

  8. Buka file src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java.

  9. Temukan tempat penampung Enter_Your_Admin_Group_ID_Here dan ganti nilai yang ada dengan objectId nilai AdminGroup Anda.

  10. Temukan tempat penampung Enter_Your_User_Group_ID_Here dan ganti nilai yang ada dengan objectId nilai UserGroup Anda.

Jalankan sampel

Bagian berikut menunjukkan kepada Anda cara menyebarkan sampel ke Azure Container Apps.

Prasyarat

  • Akun Azure. Jika Anda tidak memilikinya, buat akun gratis. Anda memerlukan izin Contributor atau Owner pada langganan Azure untuk melanjutkan. Untuk informasi selengkapnya, lihat Menetapkan peran Azure menggunakan portal Azure.
  • Azure CLI.
  • Ekstensi CLI Azure Container Apps, versi 0.3.47 atau yang lebih tinggi. Untuk menginstal versi terbaru, gunakan az extension add --name containerapp --upgrade --allow-preview perintah .
  • Java Development Kit, versi 17 atau yang lebih tinggi.
  • Maven.

Menyiapkan proyek Spring

Gunakan langkah-langkah berikut untuk menyiapkan proyek:

  1. Gunakan perintah Maven berikut untuk membangun proyek:

    mvn clean verify
    
  2. Jalankan proyek sampel secara lokal dengan menggunakan perintah berikut:

    mvn spring-boot:run
    

Siapkan

Untuk masuk ke Azure dari CLI, jalankan perintah berikut dan ikuti perintah untuk menyelesaikan proses autentikasi.

az login

Untuk memastikan Anda menjalankan CLI versi terbaru, jalankan perintah peningkatan.

az upgrade

Selanjutnya, instal atau perbarui ekstensi Azure Container Apps untuk CLI.

Jika Anda menerima kesalahan tentang parameter yang hilang saat menjalankan az containerapp perintah di Azure CLI, pastikan Anda memiliki versi terbaru ekstensi Azure Container Apps yang terinstal.

az extension add --name containerapp --upgrade

Catatan

Mulai Mei 2024, ekstensi Azure CLI tidak lagi mengaktifkan fitur pratinjau secara default. Untuk mengakses fitur pratinjau Container Apps, instal ekstensi Container Apps dengan --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Sekarang setelah ekstensi atau modul saat ini diinstal, daftarkan Microsoft.App namespace layanan dan Microsoft.OperationalInsights .

Catatan

Sumber daya Azure Container Apps telah bermigrasi dari namespace layanan Microsoft.Web ke namespace layanan Microsoft.App. Lihat Migrasi Namespace layanan dari Microsoft.Web ke Microsoft.App pada bulan Maret 2022 untuk detail selengkapnya.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Membuat lingkungan Azure Container Apps

Setelah penyiapan Azure CLI selesai, Anda dapat menentukan variabel lingkungan yang digunakan di seluruh artikel ini.

Tentukan variabel berikut dalam shell bash Anda.

export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"

Buat grup sumber daya.

az group create  \
    --name $RESOURCE_GROUP \
    --location $LOCATION \

Buat lingkungan dengan ruang kerja Analitik Log yang dibuat secara otomatis.

az containerapp env create \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION

Tampilkan domain default lingkungan aplikasi kontainer. Catat domain ini untuk digunakan di bagian selanjutnya.

az containerapp env show \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --query properties.defaultDomain

Menyiapkan aplikasi untuk penyebaran

Saat Anda menyebarkan aplikasi ke Azure Container Apps, URL pengalihan Anda berubah ke URL pengalihan instans aplikasi yang anda sebarkan di Azure Container Apps. Gunakan langkah-langkah berikut untuk mengubah pengaturan ini di file application.yml Anda:

  1. Navigasi ke file src\main\resources\application.yml aplikasi Anda dan ubah nilai post-logout-redirect-uri ke nama domain aplikasi yang Disebarkan, seperti yang ditunjukkan dalam contoh berikut. Pastikan untuk mengganti <API_NAME> dan <default-domain-of-container-app-environment> dengan nilai aktual Anda. Misalnya, dengan domain default untuk lingkungan Azure Container App Anda dari langkah sebelumnya dan ms-identity-api untuk nama aplikasi Anda, Anda akan menggunakan https://ms-identity-api.<default-domain> untuk nilai tersebut post-logout-redirect-uri .

    post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
    
  2. Setelah menyimpan file ini, gunakan perintah berikut untuk membangun kembali aplikasi Anda:

    mvn clean package
    

Penting

File application.yml aplikasi saat ini menyimpan nilai rahasia klien Anda dalam client-secret parameter . Tidak baik untuk menyimpan nilai ini dalam file ini. Anda mungkin juga mengambil risiko jika Anda menerapkan file ke repositori Git. Untuk pendekatan yang direkomendasikan, lihat Mengelola rahasia di Azure Container Apps.

Memperbarui pendaftaran aplikasi ID Microsoft Entra Anda

Karena URI pengalihan berubah ke aplikasi yang disebarkan di Azure Container Apps, Anda juga perlu mengubah URI pengalihan di pendaftaran aplikasi ID Microsoft Entra Anda. Gunakan langkah-langkah berikut untuk membuat perubahan ini:

  1. Navigasikan ke halaman platform identitas Microsoft untuk pengembang Pendaftaran aplikasi.

  2. Gunakan kotak pencarian untuk mencari pendaftaran aplikasi Anda - misalnya, java-servlet-webapp-authentication.

  3. Buka pendaftaran aplikasi Anda dengan memilih namanya.

  4. Pilih Autentikasi dari menu.

  5. Di bagian URI Pengalihan Web - , pilih Tambahkan URI.

  6. Isi URI aplikasi Anda, tambahkan /login/oauth2/code/ - misalnya, https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/.

  7. Pilih Simpan.

Menyebarkan aplikasi

Sebarkan paket JAR ke Azure Container Apps.

Catatan

Jika perlu, Anda dapat menentukan versi JDK di variabel lingkungan build Java. Untuk informasi selengkapnya, lihat Membangun variabel lingkungan untuk Java di Azure Container Apps.

Sekarang Anda dapat menyebarkan file WAR Anda dengan az containerapp up perintah CLI.

az containerapp up \
    --name $API_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --environment $ENVIRONMENT \
    --artifact <JAR_FILE_PATH_AND_NAME> \
    --ingress external \
    --target-port 8080 \
    --query properties.configuration.ingress.fqdn

Catatan

Versi JDK default adalah 17. Jika Anda perlu mengubah versi JDK untuk kompatibilitas dengan aplikasi, Anda dapat menggunakan --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION> argumen untuk menyesuaikan nomor versi.

Untuk variabel lingkungan build lainnya, lihat Membangun variabel lingkungan untuk Java di Azure Container Apps.

Memvalidasi aplikasi

Dalam contoh ini, containerapp up perintah menyertakan --query properties.configuration.ingress.fqdn argumen, yang mengembalikan nama domain yang sepenuhnya memenuhi syarat (FQDN), juga dikenal sebagai URL aplikasi. Gunakan langkah-langkah berikut untuk memeriksa log aplikasi untuk menyelidiki masalah penyebaran apa pun:

  1. Akses URL aplikasi output dari halaman Output di bagian Penyebaran .

  2. Dari panel navigasi halaman Gambaran Umum instans Azure Container Apps, pilih Log untuk memeriksa log aplikasi.

Menjelajahi sampel

Gunakan langkah-langkah berikut untuk menjelajahi sampel:

  1. Perhatikan status masuk atau keluar yang ditampilkan di tengah layar.
  2. Pilih tombol peka konteks di sudut. Tombol ini membaca Masuk saat Anda pertama kali menjalankan aplikasi. Atau, pilih detail token, hanya admin, atau pengguna reguler. Karena halaman ini dilindungi dan memerlukan autentikasi, Anda secara otomatis diarahkan ke halaman masuk.
  3. Pada halaman berikutnya, ikuti instruksi dan masuk dengan akun di penyewa ID Microsoft Entra.
  4. Pada layar persetujuan, perhatikan cakupan yang diminta.
  5. Setelah berhasil menyelesaikan alur masuk, Anda harus dialihkan ke halaman beranda - yang menunjukkan status masuk - atau salah satu halaman lainnya, tergantung tombol mana yang memicu alur masuk Anda.
  6. Perhatikan bahwa tombol peka konteks sekarang mengatakan Keluar dan menampilkan nama pengguna Anda.
  7. Jika Anda berada di beranda, pilih Detail Token ID untuk melihat beberapa klaim token ID yang didekodekan, termasuk grup.
  8. Pilih Admin Saja untuk melihat /admin_only. Hanya pengguna yang termasuk dalam grup keamanan yang AdminGroup bisa melihat halaman ini. Jika tidak, pesan kegagalan otorisasi ditampilkan.
  9. Pilih Pengguna Reguler untuk melihat /regular_user halaman. Hanya pengguna yang termasuk dalam grup keamanan yang AdminGroup bisa melihat halaman ini. Jika tidak, pesan kegagalan otorisasi ditampilkan.
  10. Gunakan tombol di sudut untuk keluar. Halaman status mencerminkan status baru.

Tentang kode

Sampel ini menunjukkan cara menggunakan pustaka klien Microsoft Entra ID Spring Boot Starter untuk Java guna memasukkan pengguna ke penyewa ID Microsoft Entra Anda. Sampel ini juga menggunakan starter boot Spring Oauth2 Client dan Spring Web. Sampel menggunakan klaim dari token ID yang diperoleh dari ID Microsoft Entra untuk menampilkan detail pengguna yang masuk, dan untuk membatasi akses ke beberapa halaman dengan menggunakan klaim grup untuk otorisasi.

Konten

Tabel berikut ini memperlihatkan konten folder proyek sampel:

Berkas/Folder Deskripsi
pom.xml Dependensi aplikasi.
src/main/resources/templates/ Templat Thymeleaf untuk UI.
src/main/resources/application.yml Konfigurasi Pustaka Pemula Boot Id Microsoft Entra dan Aplikasi.
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ Direktori ini berisi titik masuk aplikasi utama, pengontrol, dan kelas konfigurasi.
.../MsIdentitySpringBootWebappApplication.java Kelas utama.
.../SampleController.java Pengontrol dengan pemetaan titik akhir.
.../SecurityConfig.java Konfigurasi keamanan - misalnya, rute mana yang memerlukan autentikasi.
.../Utilities.java Kelas utilitas - misalnya, memfilter klaim token ID.
CHANGELOG.md Daftar perubahan pada sampel.
CONTRIBUTING.md Panduan untuk berkontribusi pada sampel.
LISENSI Lisensi untuk sampel.

Klaim token ID

Untuk mengekstrak detail token, aplikasi menggunakan spring security AuthenticationPrincipal dan OidcUser objek dalam pemetaan permintaan, seperti yang ditunjukkan dalam contoh berikut. Lihat Pengontrol Sampel untuk detail lengkap tentang bagaimana aplikasi ini menggunakan klaim token ID.

import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
    Map<String, Object> claims = principal.getIdToken().getClaims();
}

Memproses klaim grup dalam token ID

Klaim grup token menyertakan nama grup tempat pengguna masuk ditetapkan, seperti yang ditunjukkan dalam contoh berikut:

{
  ...
  "groups": [
    "xyz-id-xyz",
    "xyz-id-xyz",]
  ...
}

Cara umum untuk mengakses nama grup didokumenkan di bagian klaim token ID.

Microsoft Entra ID Boot Starter v3.5 dan yang lebih tinggi mengurai klaim grup secara otomatis dan menambahkan setiap grup ke pengguna Authoritiesyang masuk. Konfigurasi ini memungkinkan pengembang untuk menggunakan grup dengan anotasi kondisi Spring PrePost menggunakan metode .hasAuthority Misalnya, Anda dapat menemukan kondisi berikut yang @PreAuthorize ditunjukkan dalam SampleController.java:

@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
    // restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
    // restrict to users who belong to any of UserGroup or AdminGroup
}

Kode berikut mendapatkan daftar lengkap otoritas untuk pengguna tertentu:

@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
   Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}

Untuk masuk, aplikasi membuat permintaan ke titik akhir masuk ID Microsoft Entra yang secara otomatis dikonfigurasi oleh pustaka klien Microsoft Entra ID Spring Boot Starter untuk Java, seperti yang ditunjukkan dalam contoh berikut:

<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>

Untuk keluar, aplikasi membuat permintaan POST ke logout titik akhir, seperti yang ditunjukkan dalam contoh berikut:

<form action="#" th:action="@{/logout}" method="post">
  <input class="btn btn-warning" type="submit" value="Sign Out" />
</form>

Elemen UI yang bergantung pada autentikasi

Aplikasi ini memiliki beberapa logika sederhana di halaman templat UI untuk menentukan konten yang akan ditampilkan berdasarkan apakah pengguna diautentikasi, seperti yang ditunjukkan dalam contoh berikut menggunakan tag Spring Security Thymeleaf:

<div sec:authorize="isAuthenticated()">
  this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
  this content only shows to not-authenticated users
</div>

Melindungi rute dengan AADWebSecurityConfigurerAdapter

Secara default, aplikasi melindungi halaman Detail Token ID, Hanya Admin, dan Pengguna Reguler sehingga hanya pengguna yang masuk yang dapat mengaksesnya. Aplikasi ini mengonfigurasi rute ini menggunakan app.protect.authenticated properti dari file application.yml . Untuk mengonfigurasi persyaratan spesifik aplikasi, Anda dapat memperluas AADWebSecurityConfigurationAdapter di salah satu kelas. Misalnya, lihat kelas SecurityConfig aplikasi ini, yang ditunjukkan dalam kode berikut:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
  @Value( "${app.protect.authenticated}" )
  private String[] protectedRoutes;

    @Override
    public void configure(HttpSecurity http) throws Exception {
    // use required configuration form AADWebSecurityAdapter.configure:
    super.configure(http);
    // add custom configuration:
    http.authorizeRequests()
      .antMatchers(protectedRoutes).authenticated()     // limit these pages to authenticated users (default: /token_details, /admin_only, /regular_user)
      .antMatchers("/**").permitAll();                  // allow all other routes.
    }
}

Klaim kelebihan grup

Untuk memastikan bahwa ukuran token tidak melebihi batas ukuran header HTTP, platform identitas Microsoft membatasi jumlah ID objek yang disertakan dalam klaim grup.

Batas kelebihan penggunaan adalah 150 untuk token SAML, 200 untuk token JWT, 6 untuk aplikasi satu halaman. Jika pengguna adalah anggota lebih banyak grup daripada batas kelebihan penggunaan, maka platform identitas Microsoft tidak memancarkan ID grup dalam klaim grup dalam token. Sebaliknya, ini termasuk klaim kelebihan penggunaan dalam token yang menunjukkan ke aplikasi untuk mengkueri Microsoft Graph API untuk mengambil keanggotaan grup pengguna.

Microsoft Entra ID Boot Starter v3.5 dan yang lebih tinggi mengurai klaim grup secara otomatis dan menambahkan setiap grup ke pengguna Authoritiesyang masuk. Starter secara otomatis menangani skenario kelebihan grup.

Catatan

Kami sangat menyarankan Anda menggunakan fitur pemfilteran grup, jika memungkinkan, untuk menghindari kelebihan grup. Untuk informasi selengkapnya, lihat bagian Mengonfigurasi aplikasi Anda untuk menerima nilai klaim grup dari sekumpulan grup yang difilter yang mungkin ditetapkan pengguna.

Membuat skenario kelebihan penggunaan untuk pengujian

Anda dapat menggunakan file BulkCreateGroups.ps1 yang disediakan di folder AppCreationScripts untuk membuat sejumlah besar grup dan menetapkan pengguna kepada mereka. File ini membantu menguji skenario kelebihan penggunaan selama pengembangan. Ingatlah untuk mengubah pengguna objectId yang disediakan dalam skrip BulkCreateGroups.ps1 .

Penanganan kelebihan penggunaan memerlukan panggilan ke Microsoft Graph untuk membaca keanggotaan grup pengguna yang masuk, sehingga aplikasi Anda harus memiliki izin User.Read dan GroupMember.Read.All agar fungsi getMemberGroups berhasil dijalankan.

Penting

Untuk skenario kelebihan penggunaan, pastikan Anda telah memberikan Admin Consent cakupan Microsoft Graph API GroupMember.Read.All untuk aplikasi klien dan layanan. Untuk informasi selengkapnya, lihat langkah-langkah pendaftaran aplikasi sebelumnya di artikel ini.

Memperbarui pendaftaran aplikasi ID Microsoft Entra (java-spring-webapp-groups)

Untuk memperbarui pendaftaran aplikasi, gunakan langkah-langkah berikut:

  1. Navigasi kembali ke portal Azure.

  2. Pada panel navigasi, pilih Azure Active Directory, lalu pilih Pendaftaran aplikasi (Pratinjau).

  3. Di layar yang dihasilkan, pilih java-spring-webapp-groups aplikasi.

  4. Pada halaman pendaftaran aplikasi, pilih Autentikasi dari menu.

  5. Di bagian URI Pengalihan, perbarui URL balasan agar sesuai dengan URL situs penyebaran Azure Anda - misalnya, https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/.

Penting

Jika aplikasi Anda menggunakan penyimpanan berbasis memori, Azure App Services akan membekukan situs web Anda jika tidak aktif, dan catatan apa pun yang disimpan oleh aplikasi Anda akan hilang. Selain itu, jika Anda meningkatkan jumlah instans situs web Anda, permintaan didistribusikan di antara instans. Dengan demikian, catatan aplikasi Anda tidak sama pada setiap instans.

Informasi selengkapnya

Untuk informasi selengkapnya tentang cara kerja protokol OAuth 2.0 dalam skenario ini dan skenario lainnya, lihat Skenario Autentikasi untuk ID Microsoft Entra.