Mengaktifkan fitur masuk untuk aplikasi Java WebSphere menggunakan MSAL4J dengan Azure Active Directory B2C

Artikel ini mendemonstrasikan aplikasi Java Servlet yang mengautentikasi pengguna menggunakan Azure Active Directory B2C (Azure AD B2C) dengan Perpustakaan Autentikasi Microsoft untuk Java (MSAL4J).

Catatan

Mulai 1 Mei 2025, Azure Active Directory B2C tidak lagi tersedia untuk dibeli pelanggan baru. Pelanggan yang ada dapat terus menggunakan Azure AD B2C, dengan dukungan yang diberikan hingga setidaknya Mei 2030. Untuk proyek identitas pelanggan dan manajemen akses (CIAM) baru, gunakan Microsoft Entra External ID sebagai gantinya.

Diagram berikut menunjukkan topologi aplikasi:

Diagram yang menunjukkan topologi aplikasi.

Aplikasi ini menggunakan MSAL4J untuk memungkinkan pengguna masuk dan memperoleh ID token dari Azure AD B2C. Token ID membuktikan bahwa pengguna telah diautentikasi pada tenant Azure AD B2C.

Prasyarat

  • JDK versi 8 atau lebih tinggi
  • Maven 3
  • Tenant Azure AD B2C. Untuk informasi selengkapnya, lihat Tutorial: Membuat penyewa Azure Active Directory B2C
  • Akun pengguna di penyewa Azure AD B2C Anda.
  • WebSphere
  • Visual Studio Code
  • Alat Azure untuk Visual Studio Code

Rekomendasi

  • Memiliki pemahaman dasar tentang Java / Jakarta Servlets.
  • Beberapa keakraban dengan terminal Linux/OSX.
  • jwt.ms untuk memeriksa token Anda.
  • Fiddler untuk memantau aktivitas jaringan dan melakukan pemecahan masalah.
  • Ikuti Blog Microsoft Entra untuk tetap up-to-date dengan perkembangan terbaru.

Siapkan 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/1-Authentication/sign-in-b2c

Atau, buka 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 Azure AD B2C Anda

Sampel dilengkapi dengan aplikasi yang telah terdaftar sebelumnya untuk tujuan pengujian. Jika Anda ingin menggunakan penyewa dan aplikasi Azure AD B2C Anda sendiri, ikuti langkah-langkah di bagian berikut untuk mendaftar dan mengonfigurasi aplikasi di portal Azure. Jika tidak, lanjutkan dengan langkah-langkah untuk Menjalankan contoh.

Pilih penyewa Azure AD B2C 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 Azure AD B2C, pilih profil Anda di sudut portal Azure, lalu pilih Alihkan direktori untuk mengubah sesi Anda ke penyewa Azure AD B2C yang diinginkan.

Membuat alur pengguna dan kebijakan kustom

Untuk membuat alur pengguna umum seperti pendaftaran, masuk, mengedit profil, dan pengaturan ulang kata sandi, lihat Tutorial: Membuat alur pengguna di Azure Active Directory B2C.

Anda juga harus mempertimbangkan untuk membuat kebijakan kustom di Azure Active Directory B2C, namun hal ini berada di luar cakupan tutorial ini.

Tambahkan penyedia identitas eksternal

Lihat Tutorial: Tambahkan penyedia identitas ke aplikasi Anda di Azure Active Directory B2C.

Daftarkan aplikasi (ms-identity-b2c-java-servlet-webapp-authentication)

Untuk mendaftarkan aplikasi, gunakan langkah-langkah berikut:

  1. Buka portal Azure dan pilih Azure AD B2C.

  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 Name, masukkan nama aplikasi yang sesuai yang akan ditampilkan kepada pengguna aplikasi - misalnya, .
    • Di bawah Jenis akun yang didukung, pilih Akun di direktori organisasi dan akun Microsoft pribadi apa pun (misalnya Skype, Xbox, Outlook.com).
    • Di bagian URI pengalihan (opsional), pilih Web di kotak kombo dan masukkan URI pengalihan berikut: .
  4. Pilih Daftar untuk membuat aplikasi.

  5. Pada halaman registrasi 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 kedaluwarsa untuk rahasia atau tentukan masa pakai kustom. Rahasia klien dibatasi hingga masa pakai maksimum 24 bulan, dan Microsoft merekomendasikan kedaluwarsa kurang dari 12 bulan. Untuk aplikasi produksi, pilih sertifikat atau kredensial identitas federasi daripada rahasia klien.

  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.

Konfigurasikan aplikasi (ms-identity-b2c-java-servlet-webapp-authentication) untuk menggunakan pendaftaran aplikasi Anda

Gunakan langkah-langkah berikut untuk mengonfigurasi aplikasi:

Catatan

Pada langkah-langkah berikut, sama dengan atau .

  1. Buka proyek di IDE Anda.

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

  3. Temukan properti dan ganti nilai yang ada dengan ID aplikasi atau dari aplikasi di portal Azure.

  4. Temukan properti aad.secret dan ganti nilai yang ada dengan nilai yang Anda simpan saat membuat aplikasi ms-identity-b2c-java-servlet-webapp-authentication dari portal Azure.

  5. Temukan properti dan ganti clientId aplikasi yang ada dengan nilai yang Anda masukkan ke dalam pada langkah 1 di bagian ini.

  6. Temukan properti aad.authority dan ganti kemunculan pertama fabrikamb2c dengan nama penyewa Azure AD B2C tempat Anda membuat aplikasi ms-identity-b2c-java-servlet-webapp-authentication di portal Azure.

  7. Temukan properti dan ganti instans kedua dari dengan nama penyewa Azure AD B2C tempat Anda membuat aplikasi di portal Azure.

  8. Temukan properti dan ganti dengan nama kebijakan alur pengguna pendaftaran/masuk yang Anda buat di penyewa Azure AD B2C tempat Anda membuat aplikasi di portal Azure.

  9. Temukan properti aad.passwordResetPolicy dan ganti nilainya dengan nama kebijakan alur pengguna pengaturan ulang kata sandi yang Anda buat di penyewa Azure AD B2C tempat Anda membuat aplikasi ms-identity-b2c-java-servlet-webapp-authentication di portal Azure.

  10. Temukan properti dan ganti dengan nama kebijakan alur pengguna edit profil yang Anda buat di tenant Azure AD B2C tempat Anda membuat aplikasi di portal Azure.

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 konfigurasi 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. Buka file authentication.properties milik aplikasi Anda dan ubah nilai menjadi URL server dan nomor port yang akan 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 di registrasi aplikasi Azure, tempat Anda menetapkannya di portal Azure sebagai nilai Redirect URI pada tab Authentication.

  1. Buka halaman platform identitas Microsoft untuk pengembang Pendaftaran aplikasi.

  2. Gunakan kotak pencarian untuk mencari pendaftaran aplikasi Anda - misalnya, .

  3. Buka pendaftaran aplikasi Anda dengan memilih namanya.

  4. Pilih Autentikasi dari menu.

  5. Di bagian WebURI Pengalihan, pilih Tambahkan URI.

  6. Isi URI aplikasi Anda dengan menambahkan /auth/redirect - misalnya, .

  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 sampai Anda mencapai langkah penginstalan Petakan root konteks untuk modul Web. Pengaturan default lainnya harus baik-baik saja.

  3. Untuk root konteks, atur nilainya agar sama dengan nilai setelah nomor port di 'URI Pengalihan' yang Anda tetapkan dalam konfigurasi sampel atau pendaftaran aplikasi Azure. Artinya, jika URI pengalihan adalah , maka akar konteks harus .

  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 diterapkan, buka dan Anda seharusnya dapat melihat aplikasinya.

Jelajahi contoh

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 bertuliskan Masuk saat pertama kali Anda menjalankan aplikasi.
  3. Pada halaman berikutnya, ikuti instruksi dan masuk dengan akun penyedia identitas pilihan Anda.
  4. Perhatikan bahwa tombol peka konteks sekarang mengatakan Keluar dan menampilkan nama pengguna Anda.
  5. Pilih Detail Token ID untuk melihat beberapa klaim yang telah didekode dari token ID.
  6. Anda juga memiliki opsi untuk mengedit profil Anda. Pilih tautan untuk mengedit detail seperti nama tampilan, tempat tinggal, dan profesi Anda.
  7. Gunakan tombol di sudut untuk keluar.
  8. Setelah keluar dari akun, buka URL berikut untuk membuka halaman detail token: . Di sini, Anda dapat melihat bahwa aplikasi menampilkan kesalahan alih-alih klaim token ID.

Tentang kode

Sampel ini menunjukkan cara menggunakan MSAL4J untuk memasukkan pengguna ke penyewa Azure AD B2C Anda.

Isi

Tabel berikut ini memperlihatkan konten folder proyek sampel:

Berkas/folder Deskripsi
AuthHelper.java Fungsi pembantu untuk autentikasi.
Config.java Berjalan pada startup dan mengonfigurasi pembaca dan pencatat properti.
authentication.properties ID Microsoft Entra dan konfigurasi program.
AuthenticationFilter.java Mengalihkan permintaan yang tidak diautentikasi ke sumber daya yang dilindungi ke halaman 401.
MsalAuthSession Diinstansiasi dengan . Menyimpan semua atribut sesi terkait MSAL dalam atribut sesi.
*Servlet.java Semua titik akhir yang tersedia ditentukan dalam kelas Java dengan nama yang berakhiran Servlet..
CHANGELOG.md Daftar perubahan pada sampel.
CONTRIBUTING.md Panduan untuk berkontribusi pada sampel.
LISENSI Lisensi untuk sampel.

ConfidentialClientApplication

Sebuah instance dibuat di file AuthHelper.java, seperti yang ditunjukkan pada contoh berikut. Objek ini membantu membuat URL otorisasi Azure AD B2C dan juga membantu menukar token autentikasi dengan token akses.

IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                     .builder(CLIENT_ID, secret)
                     .b2cAuthority(AUTHORITY + policy)
                     .build();

Parameter berikut digunakan untuk instansiasi:

  • ID Klien aplikasi.
  • Rahasia klien, yang merupakan persyaratan untuk Aplikasi Klien Rahasia.
  • Otoritas Azure AD B2C digabungkan dengan yang sesuai untuk pendaftaran, masuk, pengeditan profil, atau pengaturan ulang kata sandi.

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 dalam proses masuk adalah mengirim permintaan ke endpoint untuk tenant Azure Active Directory B2C Anda. Instans MSAL4J digunakan untuk menyusun URL permintaan otorisasi, dan aplikasi mengalihkan browser ke URL ini, seperti yang ditunjukkan dalam contoh berikut:

    final ConfidentialClientApplication client = getConfidentialClientInstance(policy);
    final AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters
        .builder(REDIRECT_URI, Collections.singleton(SCOPES)).responseMode(ResponseMode.QUERY)
        .prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
    
    final String redirectUrl = client.getAuthorizationRequestUrl(parameters).toString();
    Config.logger.log(Level.INFO, "Redirecting user to {0}", redirectUrl);
    resp.setStatus(302);
    resp.sendRedirect(redirectUrl);
    

    Daftar berikut menjelaskan fitur kode ini:

    • : Parameter yang harus ditetapkan untuk membuat AuthorizationRequestUrl.

    • : Tempat Azure AD B2C mengalihkan browser - bersama dengan kode otorisasi - setelah mengumpulkan kredensial pengguna.

    • : Scopes adalah izin yang diminta oleh aplikasi.

      Biasanya, ketiga cakupan sudah memadai untuk menerima respons ID token. Namun, MSAL4J memerlukan semua respons dari Azure AD B2C untuk juga berisi token akses.

      Agar Azure AD B2C mengeluarkan token akses serta token ID, permintaan harus menyertakan cakupan sumber daya tambahan. Karena aplikasi ini sebenarnya tidak memerlukan cakupan sumber daya eksternal, aplikasi ini menambahkan ID kliennya sendiri sebagai cakupan keempat untuk menerima token akses.

      Anda dapat menemukan daftar lengkap cakupan yang diminta oleh aplikasi di file authentication.properties.

    • : Azure AD B2C dapat mengembalikan respons sebagai parameter formulir dalam permintaan HTTP POST atau sebagai parameter string kueri dalam permintaan HTTP GET.

    • : Azure AD B2C harus meminta pengguna memilih akun yang akan digunakan untuk autentikasi.

    • : Variabel unik yang ditetapkan aplikasi dalam sesi pada setiap permintaan token dan dihapus setelah menerima callback pengalihan Azure AD B2C yang terkait. Variabel state memastikan bahwa permintaan Azure AD B2C ke benar-benar berasal dari permintaan otorisasi Azure AD B2C yang berasal dari aplikasi dan sesi ini, sehingga mencegah serangan CSRF. Ini dilakukan dalam file AADRedirectServlet.java .

    • : Variabel unik yang ditetapkan aplikasi dalam sesi pada setiap permintaan token dan dihapus setelah token yang sesuai diterima. Nonce ini ditranskripsikan ke token yang dihasilkan dispensasi Azure AD B2C, sehingga memastikan bahwa tidak ada serangan pemutaran ulang token yang terjadi.

  2. Pengguna disajikan dengan perintah masuk oleh Azure Active Directory B2C. Jika upaya masuk berhasil, browser pengguna dialihkan ke titik akhir pengalihan aplikasi. Permintaan yang sah ke titik akhir ini berisi kode otorisasi.

  3. Instans kemudian menukar kode otorisasi ini dengan token ID dan token akses dari Azure Active Directory B2C, seperti yang ditunjukkan dalam contoh berikut:

    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
                        .builder(authCode, new URI(REDIRECT_URI))
                        .scopes(Collections.singleton(SCOPES)).build();
    
    final ConfidentialClientApplication client = AuthHelper
            .getConfidentialClientInstance(policy);
    final Future<IAuthenticationResult> future = client.acquireToken(authParams);
    final IAuthenticationResult result = future.get();
    

    Daftar berikut menjelaskan fitur kode ini:

    • : Parameter yang harus ditetapkan untuk menukar kode otorisasi dengan token ID dan/atau token akses.
    • : Kode otorisasi yang diterima di endpoint pengalihan.
    • : URI pengalihan yang digunakan pada langkah sebelumnya harus dikirimkan kembali.
    • : Cakupan akses yang digunakan pada langkah sebelumnya harus diberikan kembali.
  4. Jika berhasil, klaim token diekstrak dan klaim nonce divalidasi dengan membandingkannya dengan nonce yang disimpan di sesi, seperti yang ditunjukkan dalam contoh berikut:

    parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache);
    validateNonce(msalAuth)
    processSuccessfulAuthentication(msalAuth);
    
  5. Jika nonce berhasil divalidasi, status autentikasi disimpan dalam sesi di sisi server, dengan memanfaatkan metode yang disediakan oleh kelas , seperti yang ditunjukkan dalam contoh berikut:

    msalAuth.setAuthenticated(true);
    msalAuth.setUsername(msalAuth.getIdTokenClaims().get("name"));
    

Informasi selengkapnya

  • Apa itu Azure Active Directory B2C?
  • Jenis aplikasi yang dapat digunakan di Direktori Aktif B2C
  • Rekomendasi dan praktik terbaik untuk Azure Active Directory B2C
  • Sesi Azure AD B2C
  • Pustaka Autentikasi Microsoft (MSAL) untuk Java

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

Langkah selanjutnya

Sebarkan aplikasi Java WebSphere ke WebSphere tradisional di Azure Virtual Machines