Bagikan melalui


Mengamankan aplikasi Java Tomcat menggunakan peran dan klaim peran

Artikel ini menunjukkan aplikasi Java Tomcat yang menggunakan OpenID Connect untuk memasukkan pengguna dan Peran Aplikasi ID Microsoft Entra (peran aplikasi) untuk otorisasi.

Aplikasi ini menerapkan kontrol akses berbasis peran (RBAC) menggunakan peran aplikasi dan fitur klaim peran ID Microsoft Entra. Pendekatan lain adalah menggunakan grup ID Microsoft Entra dan klaim grup. Grup ID Microsoft Entra dan peran aplikasi tidak saling eksklusif. Anda dapat menggunakan keduanya untuk menyediakan kontrol akses menenangkan.

Anda juga dapat menggunakan RBAC dengan peran aplikasi dan klaim peran untuk menerapkan kebijakan otorisasi dengan aman.

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

Untuk informasi selengkapnya tentang cara kerja protokol dalam skenario ini dan dalam skenario lain, lihat Autentikasi vs. otorisasi.

Aplikasi ini menggunakan MSAL for Java (MSAL4J) untuk memasukkan pengguna dan mendapatkan token ID dari ID Microsoft Entra.

Sampel ini terlebih dahulu menggunakan MSAL untuk Java (MSAL4J) untuk memasukkan pengguna. Pada beranda, ia menampilkan opsi bagi pengguna untuk melihat klaim dalam token ID mereka. Aplikasi ini juga memungkinkan pengguna untuk melihat halaman admin istimewa atau halaman pengguna biasa, tergantung pada peran aplikasi tempat mereka ditetapkan. Idenya adalah untuk memberikan contoh bagaimana, dalam aplikasi, akses ke fungsionalitas atau halaman tertentu dibatasi untuk subset pengguna tergantung pada peran mana mereka berada.

Otorisasi semacam ini diimplementasikan menggunakan RBAC. Dengan RBAC, administrator memberikan izin untuk peran, bukan untuk pengguna atau grup individual. Administrator kemudian dapat menetapkan peran kepada pengguna dan grup yang berbeda untuk mengontrol siapa yang memiliki akses ke konten dan fungsionalitas tertentu.

Aplikasi sampel ini mendefinisikan dua Peran Aplikasi berikut:

  • PrivilegedAdmin: Berwenang untuk mengakses halaman Admin Saja dan Pengguna Reguler.
  • RegularUser: Berwenang untuk mengakses halaman Pengguna Reguler.

Peran aplikasi ini didefinisikan dalam portal Azure dalam manifes pendaftaran aplikasi. Saat pengguna masuk ke aplikasi, MICROSOFT Entra ID memancarkan klaim peran untuk setiap peran yang diberikan secara individual kepada pengguna dalam bentuk keanggotaan peran.

Anda dapat menetapkan pengguna dan grup ke peran melalui portal Azure.

Catatan

Klaim peran tidak ada untuk pengguna tamu di penyewa jika https://login.microsoftonline.com/common/ titik akhir digunakan sebagai otoritas untuk memasukkan pengguna. Anda perlu memasukkan pengguna ke titik akhir yang disewa seperti https://login.microsoftonline.com/tenantid.

Prasyarat

Rekomendasi

  • Beberapa keakraban dengan Java / Jakarta Servlets.
  • 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 3-java-servlet-web-app/3-Authorization-II/roles

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-servlet-webapp-roles)

Pertama, daftarkan aplikasi baru di portal Azure dengan mengikuti instruksi di Mulai Cepat: Mendaftarkan aplikasi dengan platform identitas Microsoft.

Kemudian, gunakan langkah-langkah berikut untuk menyelesaikan pendaftaran:

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

  2. 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-servlet-webapp-roles.

    • Di bawah Jenis akun yang didukung, pilih salah satu opsi berikut:

      • Pilih Akun di direktori organisasi ini hanya jika Anda membuat aplikasi untuk digunakan hanya oleh pengguna di penyewa Anda - yaitu, aplikasi penyewa tunggal.
    • Di bagian URI Pengalihan, pilih Web di kotak kombo dan masukkan URI pengalihan berikut: http://localhost:8080/msal4j-servlet-roles/auth/redirect.

  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. Pilih Simpan untuk menerapkan perubahan.

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

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

  9. Ketik deskripsi - misalnya, rahasia aplikasi.

  10. Pilih salah satu durasi yang tersedia: Dalam 1 tahun, Dalam 2 tahun, atau Tidak Pernah Kedaluwarsa.

  11. Pilih Tambahkan. Nilai yang dihasilkan ditampilkan.

  12. 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.

Menentukan peran aplikasi

Untuk menentukan peran aplikasi, gunakan langkah-langkah berikut:

  1. Masih pada pendaftaran aplikasi yang sama, pilih Peran aplikasi di panel navigasi.

  2. Pilih Buat peran aplikasi, lalu masukkan nilai berikut:

    • Untuk Nama tampilan, masukkan nama yang sesuai - misalnya, PrivilegedAdmin.
    • Untuk Jenis anggota yang diizinkan, pilih Pengguna.
    • Untuk Nilai, masukkan PrivilegedAdmin.
    • Untuk Deskripsi, masukkan PrivilegedAdmins yang bisa melihat Halaman Admin.
  3. Pilih Buat peran aplikasi, lalu masukkan nilai berikut:

    • Untuk Nama tampilan, masukkan nama yang sesuai - misalnya, RegularUser.
    • Untuk Jenis anggota yang diizinkan, pilih Pengguna.
    • Untuk Nilai, masukkan RegularUser.
    • Untuk Deskripsi, masukkan RegularUsers yang bisa melihat Halaman Pengguna.
  4. Pilih Terapkan untuk menyimpan perubahan.

Menetapkan pengguna ke peran aplikasi

Untuk menambahkan pengguna ke peran aplikasi yang ditentukan sebelumnya, ikuti panduan di sini: Menetapkan pengguna dan grup ke peran.


Mengonfigurasi aplikasi (java-servlet-webapp-roles) untuk menggunakan pendaftaran aplikasi Anda

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 authentication.properties.

  3. Temukan {enter-your-tenant-id-here} stringnya. Ganti nilai yang ada dengan ID penyewa MICROSOFT Entra ID Anda.

  4. Temukan string {enter-your-client-id-here} dan ganti nilai yang ada dengan ID aplikasi atau clientId aplikasi yang java-servlet-webapp-call-graph disalin dari portal Azure.

  5. Temukan string {enter-your-client-secret-here} dan ganti nilai yang ada dengan nilai yang Anda simpan selama pembuatan java-servlet-webapp-roles aplikasi, di portal Azure.

  6. app.roles Temukan properti dan pastikan nilai diatur ke app.roles=admin PrivilegedAdmin, user RegularUser, atau ganti nama peran spesifik Anda.

Susun sampel

Untuk membuat sampel menggunakan Maven, navigasikan ke direktori yang berisi file pom.xml untuk sampel, lalu jalankan perintah berikut:

mvn clean package

Perintah ini menghasilkan file .war yang dapat Anda jalankan di berbagai server aplikasi.

Jalankan sampel

Bagian berikut menunjukkan kepada Anda cara menyebarkan sampel ke Azure App Service.

Prasyarat

Mengonfigurasikan plugin Maven

Saat Anda menyebarkan ke Azure App Service, penyebaran secara otomatis menggunakan kredensial Azure Anda dari Azure CLI. Jika Azure CLI tidak diinstal secara lokal, maka plugin Maven mengautentikasi dengan OAuth atau masuk perangkat. Untuk informasi selengkapnya, lihat autentikasi dengan plugin Maven.

Gunakan langkah-langkah berikut untuk mengonfigurasi plugin:

  1. Jalankan perintah berikut untuk mengonfigurasi penyebaran. Perintah ini membantu Anda menyiapkan sistem operasi Azure App Service, versi Java, dan versi Tomcat.

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.13.0:config
    
  2. Untuk Buat konfigurasi eksekusi baru, tekan Y, lalu tekan Enter.

  3. Untuk Tentukan nilai untuk OS, tekan 1 untuk Windows, atau 2 untuk Linux, lalu tekan Enter.

  4. Untuk Tentukan nilai untuk javaVersion, tekan 2 untuk Java 11, lalu tekan Enter.

  5. Untuk Tentukan nilai untuk webContainer, tekan 4 untuk Tomcat 9.0, lalu tekan Enter.

  6. Untuk Tentukan nilai untuk pricingTier, tekan Enter untuk memilih tingkat P1v2 default.

  7. Untuk Konfirmasi, tekan Y, lalu tekan Enter.

Contoh berikut menunjukkan output proses penyebaran:

Please confirm webapp properties
AppName : msal4j-servlet-auth-1707209552268
ResourceGroup : msal4j-servlet-auth-1707209552268-rg
Region : centralus
PricingTier : P1v2
OS : Linux
Java Version: Java 11
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: [INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  37.112 s
[INFO] Finished at: 2024-02-06T08:53:02Z
[INFO] ------------------------------------------------------------------------

Setelah mengonfirmasi pilihan Anda, plugin menambahkan elemen dan pengaturan plugin yang diperlukan ke file pom.xml proyek Anda untuk mengonfigurasi aplikasi Anda agar berjalan di Azure App Service.

Bagian yang relevan dari file pom.xml akan terlihat mirip dengan contoh berikut:

<build>
    <plugins>
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>>azure-webapp-maven-plugin</artifactId>
            <version>x.xx.x</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <resourceGroup>your-resourcegroup-name</resourceGroup>
                <appName>your-app-name</appName>
            ...
            </configuration>
        </plugin>
    </plugins>
</build>

Anda dapat mengubah konfigurasi untuk App Service langsung di pom.xml Anda. Beberapa konfigurasi umum tercantum dalam tabel berikut:

Properti Wajib Deskripsi
subscriptionId salah ID langganan.
resourceGroup benar Grup sumber daya Azure untuk aplikasi Anda.
appName benar Nama aplikasi Anda.
region salah Wilayah tempat menghosting aplikasi Anda. Nilai defaultnya adalah centralus. Untuk wilayah yang valid, lihat Wilayah yang Didukung.
pricingTier salah Tingkat harga untuk aplikasi Anda. Nilai defaultnya adalah P1v2 untuk beban kerja produksi. Nilai minimum yang direkomendasikan untuk pengembangan dan pengujian Java adalah B2. Untuk informasi selengkapnya, lihat Harga App Service.
runtime salah Konfigurasi lingkungan waktu proses. Untuk informasi lebih lanjut, lihat Rincian Konfigurasi.
deployment salah Konfigurasi penyebaran. Untuk informasi lebih lanjut, lihat Rincian Konfigurasi.

Untuk daftar lengkap konfigurasi, lihat dokumentasi referensi plugin. Semua plugin Azure Maven berbagi serangkaian konfigurasi umum. Untuk konfigurasi ini, lihat Konfigurasi Umum. Untuk konfigurasi khusus untuk Azure App Service, lihat Aplikasi Azure: Detail Konfigurasi.

Pastikan untuk menyimpan selain appName nilai dan resourceGroup untuk digunakan nanti.

Menyiapkan aplikasi untuk penyebaran

Saat Anda menyebarkan aplikasi ke App Service, URL pengalihan Anda berubah ke URL pengalihan instans aplikasi yang Anda sebarkan. Gunakan langkah-langkah berikut untuk mengubah pengaturan ini di file properti Anda:

  1. Navigasikan ke file authentication.properties aplikasi Anda dan ubah nilai app.homePage ke nama domain aplikasi yang Anda sebarkan, seperti yang ditunjukkan dalam contoh berikut. Misalnya, jika Anda memilih example-domain nama aplikasi di langkah sebelumnya, Anda sekarang harus menggunakan https://example-domain.azurewebsites.net untuk nilai tersebut app.homePage . Pastikan Anda juga telah mengubah protokol dari http ke https.

    # app.homePage is by default set to dev server address and app context path on the server
    # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
    app.homePage=https://<your-app-name>.azurewebsites.net
    
  2. Setelah menyimpan file ini, gunakan perintah berikut untuk membangun kembali aplikasi Anda:

    mvn clean package
    

Penting

Dalam file authentication.properties yang sama ini, Anda memiliki pengaturan untuk .aad.secret Ini bukan praktik yang baik untuk menyebarkan nilai ini ke App Service. Tidak ada baiknya untuk meninggalkan nilai ini dalam kode Anda dan berpotensi mendorongnya ke repositori git Anda. Untuk menghapus nilai rahasia ini dari kode Anda, Anda dapat menemukan panduan yang lebih rinci di bagian Sebarkan ke App Service - Hapus rahasia . Panduan ini menambahkan langkah tambahan untuk mendorong nilai rahasia ke Key Vault dan menggunakan Referensi Key Vault.

Memperbarui pendaftaran aplikasi ID Microsoft Entra Anda

Karena URI pengalihan berubah ke aplikasi yang disebarkan ke Azure App Service, 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 /auth/redirect - misalnya, https://<your-app-name>.azurewebsites.net/auth/redirect.

  7. Pilih Simpan.

Menyebarkan aplikasi

Anda sekarang siap untuk menyebarkan aplikasi Anda ke Azure App Service. Gunakan perintah berikut untuk memastikan Anda masuk ke lingkungan Azure Anda untuk menjalankan penyebaran:

az login

Dengan semua konfigurasi yang siap di file pom.xml , Anda sekarang dapat menggunakan perintah berikut untuk menyebarkan aplikasi Java Anda ke Azure:

mvn package azure-webapp:deploy

Setelah penyebaran selesai, aplikasi Anda siap di http://<your-app-name>.azurewebsites.net/. Buka URL dengan browser web lokal Anda, di mana Anda akan melihat halaman msal4j-servlet-auth awal 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.
  3. Pada halaman berikutnya, ikuti instruksi dan masuk dengan akun di penyewa ID Microsoft Entra.
  4. Pada layar persetujuan, perhatikan cakupan yang diminta.
  5. Perhatikan bahwa tombol peka konteks sekarang mengatakan Keluar dan menampilkan nama pengguna Anda.
  6. Pilih Detail Token ID untuk melihat beberapa klaim token ID yang didekodekan.
  7. Pilih Admin Saja untuk menampilkan /admin_only halaman. Hanya pengguna dengan peran PrivilegedAdmin aplikasi yang dapat melihat halaman ini. Jika tidak, pesan kegagalan otorisasi ditampilkan.
  8. Pilih Pengguna Reguler untuk melihat /regular_user halaman. Hanya pengguna dengan peran RegularUser aplikasi atau PrivilegedAdmin yang dapat melihat halaman ini. Jika tidak, pesan kegagalan otorisasi ditampilkan.
  9. Gunakan tombol di sudut untuk keluar.

Tentang kode

Sampel ini menggunakan MSAL for Java (MSAL4J) untuk memasukkan pengguna dan mendapatkan token ID yang mungkin berisi klaim peran. Berdasarkan klaim peran yang ada, pengguna yang masuk tidak dapat mengakses tidak ada, satu, atau kedua halaman yang dilindungi, Admins Only dan Regular Users.

Jika Anda ingin mereplikasi perilaku sampel ini, Anda dapat menyalin file pom.xml dan konten folder pembantu dan authservlets di folder src/main/java/com/microsoft/azuresamples/msal4j. Anda juga memerlukan file authentication.properties . Kelas dan file ini berisi kode generik yang dapat Anda gunakan dalam berbagai aplikasi. Anda juga dapat menyalin sampel lainnya, tetapi kelas dan file lainnya dibangun khusus untuk mengatasi tujuan sampel ini.

Konten

Tabel berikut ini memperlihatkan konten folder proyek sampel:

File/folder Deskripsi
src/main/java/com/microsoft/azuresamples/msal4j/roles/ Direktori ini berisi kelas yang menentukan logika bisnis backend aplikasi.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Direktori ini berisi kelas yang digunakan untuk titik akhir masuk dan keluar.
*Servlet.java Semua titik akhir yang tersedia ditentukan dalam kelas Java dengan nama yang berakhiran Servlet.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Kelas pembantu untuk autentikasi.
AuthenticationFilter.java Mengalihkan permintaan yang tidak diautentikasi ke titik akhir yang dilindungi ke halaman 401.
src/main/resources/authentication.properties ID Microsoft Entra dan konfigurasi program.
src/main/webapp/ Direktori ini berisi templat UI - JSP
CHANGELOG.md Daftar perubahan pada sampel.
CONTRIBUTING.md Panduan untuk berkontribusi pada sampel.
LISENSI Lisensi untuk sampel.

Memproses klaim peran dalam token ID

Klaim peran token mencakup nama peran tempat pengguna masuk ditetapkan, seperti yang ditunjukkan dalam contoh berikut:

{
  ...
  "roles": [
    "Role1",
    "Role2",]
  ...
}

ConfidentialClientApplication

ConfidentialClientApplication Instans dibuat dalam file AuthHelper.java, seperti yang ditunjukkan dalam contoh berikut. Objek ini membantu membuat URL otorisasi Microsoft Entra dan juga membantu menukar token autentikasi dengan token akses.

// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                     .builder(CLIENT_ID, secret)
                     .authority(AUTHORITY)
                     .build();

Parameter berikut digunakan untuk instans:

  • ID klien aplikasi.
  • Rahasia klien, yang merupakan persyaratan untuk Aplikasi Klien Rahasia.
  • Otoritas ID Microsoft Entra, yang menyertakan ID penyewa Microsoft Entra Anda.

Dalam sampel ini, nilai-nilai ini dibaca dari file authentication.properties menggunakan pembaca properti dalam file Config.java .

Panduan langkah demi langkah

Langkah-langkah berikut menyediakan panduan fungsionalitas aplikasi:

  1. Langkah pertama dari proses masuk adalah mengirim permintaan ke /authorize titik akhir untuk penyewa ID Microsoft Entra Anda. Instans MSAL4J ConfidentialClientApplication digunakan untuk membuat URL permintaan otorisasi. Aplikasi mengalihkan browser ke URL ini, yang merupakan tempat pengguna masuk.

    final ConfidentialClientApplication client = getConfidentialClientInstance();
    AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES))
            .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
    
    final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString();
    contextAdapter.redirectUser(authorizeUrl);
    

    Daftar berikut menjelaskan fitur kode ini:

    • AuthorizationRequestUrlParameters: Parameter yang harus diatur untuk membangun AuthorizationRequestUrl.
    • REDIRECT_URI: Di mana MICROSOFT Entra ID mengalihkan browser - bersama dengan kode autentikasi - setelah mengumpulkan kredensial pengguna. Ini harus cocok dengan URI pengalihan dalam pendaftaran aplikasi ID Microsoft Entra di portal Azure.
    • SCOPES: Cakupan adalah izin yang diminta oleh aplikasi.
      • Biasanya, tiga cakupan openid profile offline_access cukup untuk menerima respons token ID.
      • Daftar lengkap cakupan yang diminta oleh aplikasi dapat ditemukan di file authentication.properties . Anda dapat menambahkan lebih banyak cakupan, seperti User.Read.
  2. Pengguna disajikan dengan perintah masuk oleh ID Microsoft Entra. Jika upaya masuk berhasil, browser pengguna dialihkan ke titik akhir pengalihan aplikasi. Permintaan yang valid ke titik akhir ini berisi kode otorisasi.

  3. Instans ConfidentialClientApplication kemudian menukar kode otorisasi ini dengan token ID dan token akses dari ID Microsoft Entra.

    // First, validate the state, then parse any error codes in response, then extract the authCode. Then:
    // build the auth code params:
    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
            .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build();
    
    // Get a client instance and leverage it to acquire the token:
    final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance();
    final IAuthenticationResult result = client.acquireToken(authParams).get();
    

    Daftar berikut menjelaskan fitur kode ini:

    • AuthorizationCodeParameters: Parameter yang harus diatur untuk menukar Kode Otorisasi dengan ID dan/atau token akses.
    • authCode: Kode otorisasi yang diterima di titik akhir pengalihan.
    • REDIRECT_URI: URI pengalihan yang digunakan pada langkah sebelumnya harus diteruskan lagi.
    • SCOPES: Cakupan yang digunakan pada langkah sebelumnya harus diteruskan lagi.
  4. Jika acquireToken berhasil, klaim token diekstraksi. Jika pemeriksaan nonce lolos, hasilnya ditempatkan di context - instans IdentityContextData - dan disimpan ke sesi. Aplikasi kemudian dapat membuat instans IdentityContextData dari sesi dengan cara instans IdentityContextAdapterServlet kapan pun ia membutuhkan akses ke sana, seperti yang ditunjukkan dalam kode berikut:

    // parse IdToken claims from the IAuthenticationResult:
    // (the next step - validateNonce - requires parsed claims)
    context.setIdTokenClaims(result.idToken());
    
    // if nonce is invalid, stop immediately! this could be a token replay!
    // if validation fails, throws exception and cancels auth:
    validateNonce(context);
    
    // set user to authenticated:
    context.setAuthResult(result, client.tokenCache().serialize());
    

Melindungi rute

Untuk informasi tentang cara aplikasi sampel memfilter akses ke rute, lihat AuthenticationFilter.java. Dalam file authentication.properties, app.protect.authenticated properti berisi rute yang dipisahkan koma yang hanya dapat diakses pengguna terautentikasi, seperti yang ditunjukkan dalam contoh berikut:

# for example, /token_details requires any user to be signed in and does not require special roles claim(s)
app.protect.authenticated=/token_details

Salah satu rute yang tercantum dalam seperangkat aturan yang dipisahkan koma di bawah app.protect.roles juga di luar batas untuk pengguna yang tidak diautentikasi, seperti yang ditunjukkan dalam contoh berikut. Namun, rute ini juga berisi daftar keanggotaan peran aplikasi yang dipisahkan ruang: hanya pengguna yang memiliki setidaknya salah satu peran terkait yang dapat mengakses rute ini setelah mengautentikasi.

# local short names for app roles - for example, sets admin to mean PrivilegedAdmin (useful for long rule sets defined in the next key, app.protect.roles)
app.roles=admin PrivilegedAdmin, user RegularUser

# A route and its corresponding <space-separated> role(s) that can access it; the start of the next route & its role(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by PrivilegedAdmin, /regular_user can be accessed by PrivilegedAdmin role and the RegularUser role
app.protect.roles=/admin_only admin, /regular_user admin user

Cakupan

Cakupan memberi tahu Microsoft Entra ID tingkat akses yang diminta aplikasi.

Berdasarkan cakupan yang diminta, MICROSOFT Entra ID menyajikan dialog persetujuan kepada pengguna saat masuk. Jika pengguna menyetujui satu atau beberapa cakupan dan mendapatkan token, cakupan yang disetujui untuk dikodekan ke dalam yang dihasilkan access_token.

Untuk cakupan yang diminta oleh aplikasi, lihat authentication.properties. Ketiga cakupan ini diminta oleh MSAL dan diberikan oleh ID Microsoft Entra secara default.

Informasi selengkapnya