Bagikan melalui


Mengamankan aplikasi Java WebSphere menggunakan klaim grup dan grup

Artikel ini memperlihatkan kepada Anda cara membuat aplikasi Java WebSphere yang memasukkan pengguna dengan Microsoft Authentication Library (MSAL) untuk Java. Aplikasi ini juga 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 MSAL for Java (MSAL4J) untuk memasukkan pengguna ke penyewa ID Microsoft Entra dan mendapatkan token ID dari ID Microsoft Entra. Token ID membuktikan bahwa pengguna diautentikasi dengan penyewa ini. Aplikasi ini melindungi rutenya sesuai dengan status autentikasi pengguna dan keanggotaan grup.

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

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/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-servlet-webapp-groups)

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-groups.
    • Di bawah Jenis akun yang didukung, pilih Hanya akun dalam direktori organisasi ini.
    • Di bagian URI Pengalihan, pilih Web di kotak kombo dan masukkan URI pengalihan berikut: http://localhost:8080/msal4j-servlet-groups/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.

  13. Pada halaman pendaftaran aplikasi, pilih izin API dari panel navigasi untuk membuka halaman untuk menambahkan akses ke API yang dibutuhkan aplikasi Anda.

  14. Pilih Tambahkan izin.

  15. Pastikan bahwa tab API Microsoft dipilih.

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

  17. Di bagian Izin yang didelegasikan, pilih User.Read dan GroupMember.Read.All dari daftar. Gunakan kotak pencarian jika perlu.

  18. Pilih Tambahkan izin.

  19. GroupMember.Read.All memerlukan persetujuan admin, jadi pilih Berikan/cabut persetujuan admin untuk {tenant}, lalu pilih Ya saat Anda ditanya apakah Anda ingin memberikan persetujuan untuk izin yang diminta untuk semua akun di penyewa. Anda harus menjadi admin penyewa MICROSOFT Entra ID untuk melakukan tindakan ini.


Mengonfigurasi aplikasi (java-servlet-webapp-groups) 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 ./src/main/resources/authentication.properties.

  3. Temukan {enter-your-tenant-id-here} stringnya. Ganti nilai yang ada dengan ID penyewa Microsoft Entra Jika Anda mendaftarkan aplikasi dengan opsi Hanya Akun di direktori organisasi ini.

  4. Temukan string {enter-your-client-id-here} dan ganti nilai yang ada dengan ID aplikasi atau clientId aplikasi yang java-servlet-webapp-groups 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-groups aplikasi, di portal Azure.

Mengonfigurasi kelompok keamanan

Anda memiliki opsi berikut yang tersedia 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 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 keamanan ATAU opsi Semua grup (termasuk daftar distribusi tetapi bukan grup yang ditetapkan ke aplikasi). Memilih kedua opsi 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.

    Memilih opsi lain - seperti Grup Keamanan atau Semua grup (termasuk daftar distribusi tetapi bukan grup yang ditetapkan ke aplikasi) - meniadakan manfaat yang diperoleh aplikasi Anda dari memilih untuk menggunakan opsi ini.

  4. Di bawah bagian ID , pilih ID Grup. Pilihan ini menghasilkan ID Microsoft Entra yang mengirim ID objek grup tempat pengguna ditetapkan dalam klaim grup token ID.

  5. Jika Anda mengekspos API web menggunakan opsi Ekspos API , maka Anda juga dapat memilih opsi ID Grup di bawah bagian Akses . Opsi ini menghasilkan ID Microsoft Entra yang mengirim ID objek grup yang ditetapkan pengguna dalam klaim grup token akses.

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

  7. Pilih hyperlink dengan nama aplikasi Anda di Aplikasi terkelola di direktori lokal. Judul bidang ini mungkin terpotong - misalnya Managed application in .... 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.

Mengonfigurasi aplikasi (java-servlet-webapp-groups) untuk mengenali ID grup

Gunakan langkah-langkah berikut untuk mengonfigurasi aplikasi:

Penting

Pada halaman Konfigurasi Token, jika Anda memilih opsi apa pun selain groupID - seperti DNSDomain\sAMAccountName - Anda harus memasukkan nama grup dalam langkah-langkah berikut - misalnya, contoso.com\Test Group - alih-alih ID objek:

  1. Buka file ./src/main/resources/authentication.properties.

  2. Temukan string {enter-your-admins-group-id-here} dan ganti nilai yang ada dengan ID GroupAdmin objek grup, yang Anda salin dari portal Azure. Hapus kurung kurawal dari nilai tempat penampung juga.

  3. Temukan string {enter-your-admins-group-id-here} dan ganti nilai yang ada dengan ID GroupAdmin objek grup, yang Anda salin dari portal Azure. Hapus kurung kurawal dari nilai tempat penampung juga.

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

Instruksi ini mengasumsikan bahwa Anda menginstal WebSphere dan menyiapkan server. Anda dapat menggunakan panduan di Menyebarkan Kluster WebSphere Application Server (tradisional) di Azure Virtual Machines untuk penyiapan server dasar.

Sebelum Anda dapat menyebarkan ke WebSphere, gunakan langkah-langkah berikut untuk membuat beberapa perubahan konfigurasi dalam sampel itu sendiri lalu membangun atau membangun kembali paket:

  1. Navigasikan ke file authentication.properties aplikasi Anda dan ubah nilai app.homePage ke URL server dan nomor port yang ingin Anda gunakan, seperti yang ditunjukkan dalam contoh berikut:

    # 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://<server-url>:<port-number>/msal4j-servlet-auth/
    
  2. Setelah menyimpan file ini, gunakan perintah berikut untuk membangun kembali aplikasi Anda:

    mvn clean package
    
  3. Setelah kode selesai dibangun, salin file .war ke sistem file server target Anda.

Anda juga perlu membuat perubahan yang sama dalam pendaftaran aplikasi Azure, di mana Anda mengaturnya di portal Azure sebagai nilai URI Pengalihan pada tab Autentikasi.

  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://<server-url>:<port-number>/auth/redirect.

  7. Pilih Simpan.

Gunakan langkah-langkah berikut untuk menyebarkan sampel menggunakan Konsol Solusi Terintegrasi WebSphere:

  1. Pada tab Aplikasi , pilih Aplikasi Baru, lalu Aplikasi Perusahaan Baru.

  2. Pilih file .war yang Anda buat, lalu pilih Berikutnya hingga Anda masuk ke langkah Penginstalan akar konteks Peta untuk modul Web. Pengaturan default lainnya harus baik-baik saja.

  3. Untuk akar konteks, atur ke nilai yang sama seperti setelah nomor port di 'URI Pengalihan' yang Anda tetapkan dalam konfigurasi sampel/pendaftaran aplikasi Azure. Artinya, jika URI pengalihan adalah http://<server-url>:9080/msal4j-servlet-auth/, maka akar konteks harus msal4j-servlet-auth.

  4. Pilih Selesai.

  5. Setelah aplikasi selesai diinstal, buka bagian Aplikasi perusahaan WebSphere di tab Aplikasi .

  6. Pilih file .war yang Anda instal dari daftar aplikasi lalu pilih Mulai untuk menyebarkan.

  7. Setelah selesai disebarkan, navigasikan ke http://<server-url>:9080/{whatever you set as the context root} dan Anda akan dapat melihat 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 Grup untuk melihat informasi tentang keanggotaan grup keamanan untuk pengguna yang masuk.
  8. Pilih Hanya Admin atau Pengguna Reguler untuk mengakses titik akhir yang dilindungi klaim grup.
    • Jika pengguna masuk Anda berada dalam GroupAdmin grup, pengguna dapat memasukkan kedua halaman.
    • Jika pengguna masuk Anda berada dalam GroupMember grup, pengguna hanya dapat memasukkan halaman Pengguna Reguler.
    • Jika pengguna masuk Anda tidak berada dalam grup, pengguna tidak dapat mengakses salah satu dari dua halaman.
  9. Gunakan tombol di sudut untuk keluar.
  10. Setelah keluar, pilih Detail Token ID untuk mengamati bahwa aplikasi menampilkan 401: unauthorized kesalahan alih-alih klaim token ID saat pengguna tidak diotorisasi.

Tentang kode

Sampel ini menggunakan MSAL for Java (MSAL4J) untuk memasukkan pengguna dan mendapatkan token ID yang mungkin berisi klaim grup. Jika ada terlalu banyak grup untuk emisi dalam token ID, sampel menggunakan Microsoft Graph SDK untuk Java untuk mendapatkan data keanggotaan grup dari Microsoft Graph. Berdasarkan grup milik pengguna, pengguna yang masuk dapat mengakses tidak ada, satu, atau kedua halaman yang dilindungi, Admins Only dan Regular Users.

Jika Anda ingin mereplikasi perilaku sampel ini, Anda harus menambahkan MSAL4J dan Microsoft Graph SDK ke proyek Anda menggunakan Maven. 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/groupswebapp/ 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 grup dalam token, termasuk menangani kelebihan

Bagian berikut menjelaskan cara aplikasi memproses klaim grup.

Klaim grup

ID objek dari grup keamanan tempat pengguna yang masuk adalah anggota dikembalikan dalam klaim grup token, yang ditunjukkan dalam contoh berikut:

{
  ...
  "groups": [
    "0bbe91cc-b69e-414d-85a6-a043d6752215",
    "48931dac-3736-45e7-83e8-015e6dfd6f7c",]
  ...
}

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, dan 6 untuk aplikasi Halaman Tunggal. 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, seperti yang ditunjukkan dalam contoh berikut:

{
  ...
  "_claim_names": {
    "groups": "src1"
    },
    {
   "_claim_sources": {
    "src1": {
        "endpoint":"[Graph Url to get this user's group membership from]"
        }
    }
  ...
}

Buat skenario kelebihan penggunaan dalam sampel ini untuk pengujian

Untuk membuat skenario kelebihan penggunaan, Anda bisa menggunakan langkah-langkah berikut:

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

  2. Saat Anda menjalankan contoh ini dan terjadi kelebihan penggunaan, Anda akan melihat _claim_names di beranda setelah pengguna masuk.

  3. Kami sangat menyarankan agar 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.

  4. Jika Anda tidak dapat menghindari terjadinya kelebihan grup, kami sarankan Anda menggunakan langkah-langkah berikut untuk memproses klaim grup dalam token Anda:

    1. Periksa klaim _claim_names dengan salah satu nilai yang berupa grup. Klaim ini menunjukkan kelebihan.
    2. Jika ditemukan, lakukan panggilan ke titik akhir yang ditentukan dalam _claim_sources untuk mengambil grup pengguna.
    3. Jika tidak ada yang ditemukan, lihat klaim grup untuk grup pengguna.

Catatan

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

Untuk informasi selengkapnya tentang pemrograman untuk Microsoft Graph, lihat video Pengantar Microsoft Graph untuk pengembang.

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 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());
    
    // handle groups overage if it has occurred.
    handleGroupsOverage(contextAdapter);
    
  5. Setelah langkah sebelumnya, Anda dapat mengekstrak keanggotaan grup dengan memanggil context.getGroups() menggunakan instans IdentityContextData.

  6. Jika pengguna adalah anggota dari terlalu banyak grup - lebih dari 200 - panggilan ke context.getGroups() mungkin kosong jika tidak untuk panggilan ke handleGroupsOverage(). Sementara itu, context.getGroupsOverage() mengembalikan true, menandakan bahwa terjadi kelebihan, dan bahwa mendapatkan daftar lengkap grup memerlukan panggilan ke Microsoft Graph. handleGroupsOverage() Lihat metode di AuthHelper.java untuk melihat bagaimana aplikasi ini menggunakan context.setGroups() ketika ada kelebihan.

Melindungi rute

Lihat AuthenticationFilter.java untuk melihat bagaimana aplikasi sampel memfilter akses ke rute. 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 groups claim
app.protect.authenticated=/token_details

Salah satu rute yang tercantum dalam seperangkat aturan yang dipisahkan koma di bawah app.protect.groups juga di luar batas untuk pengguna yang tidak diautentikasi, seperti yang ditunjukkan dalam contoh berikut. Namun, rute ini juga berisi daftar keanggotaan grup yang dipisahkan spasi. Hanya pengguna milik setidaknya salah satu grup yang sesuai yang dapat mengakses rute ini setelah mengautentikasi.

# define short names for group IDs here for the app. This is useful in the next property (app.protect.groups).
# EXCLUDE the curly braces, they are in this file only as delimiters.
# example:
# app.groups=groupA abcdef-qrstuvw-xyz groupB abcdef-qrstuv-wxyz
app.groups=admin {enter-your-admins-group-id-here}, user {enter-your-users-group-id-here}

# A route and its corresponding group(s) that can view it, <space-separated>; the start of the next route & its group(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by admin group, /regular_user can be accessed by admin group and user group
app.protect.groups=/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. Secara default, aplikasi mengatur nilai cakupan ke GroupMember.Read.All. Cakupan Microsoft Graph API khusus ini diperlukan jika aplikasi perlu memanggil Graph untuk mendapatkan keanggotaan grup pengguna.

Informasi selengkapnya

Langkah selanjutnya

Menyebarkan aplikasi Java WebSphere ke WebSphere Tradisional di Azure Virtual Machines