Bagikan melalui


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

Artikel ini menunjukkan aplikasi Java Servlet yang mengautentikasi pengguna terhadap Azure Active Directory B2C (Azure AD B2C) menggunakan Microsoft Authentication Library for Java (MSAL4J).

Diagram berikut menunjukkan topologi aplikasi:

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

Aplikasi ini menggunakan MSAL4J untuk memasukkan pengguna dan mendapatkan token ID dari Azure AD B2C. Token ID membuktikan bahwa pengguna diautentikasi terhadap penyewa Azure AD B2C.

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

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

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, pengeditan profil, dan reset kata sandi, lihat Tutorial: Membuat alur pengguna di Azure Active Directory B2C.

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

Menambahkan IdP eksternal

Lihat Tutorial: Menambahkan 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. Navigasi ke 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 Nama , masukkan nama aplikasi yang bermakna untuk ditampilkan kepada pengguna aplikasi - misalnya, ms-identity-b2c-java-servlet-webapp-authentication.
    • Di bawah Jenis akun yang didukung, pilih Akun di direktori organisasi dan akun Microsoft pribadi apa pun (misalnya Skype, Xbox, Outlook.com).
    • Di bagian Alihkan URI (opsional) , pilih Web di kotak kombo dan masukkan URI pengalihan berikut: http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/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.

Mengonfigurasi aplikasi (ms-identity-b2c-java-servlet-webapp-authentication) 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. aad.clientId Temukan properti dan ganti nilai yang ada dengan ID aplikasi atau clientIdms-identity-b2c-java-servlet-webapp-authentication aplikasi dari portal Azure.

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

  5. aad.scopes Temukan properti dan ganti clientId aplikasi yang ada dengan nilai yang Anda tempatkan aad.clientId di langkah 1 bagian ini.

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

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

  8. aad.signInPolicy Temukan properti dan ganti dengan nama kebijakan alur pengguna pendaftaran/masuk yang Anda buat di penyewa Azure AD B2C tempat Anda membuat ms-identity-b2c-java-servlet-webapp-authentication aplikasi di portal Azure.

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

  10. aad.editProfilePolicy Temukan properti dan ganti dengan nama kebijakan edit alur pengguna profil yang Anda buat di penyewa Azure AD B2C tempat Anda membuat ms-identity-b2c-java-servlet-webapp-authentication 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 WebLogic dan menyiapkan beberapa domain server.

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

  1. Dalam sampel, temukan file application.properties atau authentication.properties tempat Anda mengonfigurasi ID klien, penyewa, URL pengalihan, dan sebagainya.

  2. Dalam file ini, ubah referensi ke localhost:8080 atau localhost:8443 ke URL dan port tempat WebLogic berjalan, yang secara default harus .localhost:7001

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

Gunakan langkah-langkah berikut untuk menyebarkan sampel ke WebLogic melalui konsol web:

  1. Mulai server WebLogic dengan menggunakan DOMAIN_NAME\bin\startWebLogic.cmd.

  2. Navigasikan ke konsol web WebLogic di browser Anda di http://localhost:7001/console.

  3. Buka Penyebaran Struktur > Domain, pilih Instal, pilih Unggah file Anda, lalu temukan file .war yang Anda buat dengan menggunakan Maven.

  4. Pilih Instal penyebaran ini sebagai aplikasi, pilih Berikutnya, pilih Selesai, lalu pilih Simpan.

  5. Sebagian besar pengaturan default harus baik-baik saja kecuali Anda harus memberi nama aplikasi agar sesuai dengan URI pengalihan yang Anda tetapkan dalam konfigurasi sampel atau pendaftaran aplikasi Azure. Artinya, jika URI pengalihan adalah http://localhost:7001/msal4j-servlet-auth, maka Anda harus memberi nama aplikasi msal4j-servlet-auth.

  6. Kembali ke Penyebaran Struktur>Domain, dan mulai aplikasi Anda.

  7. Setelah aplikasi dimulai, navigasikan ke http://localhost:7001/<application-name>/, dan Anda harus dapat mengakses 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 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 token ID yang didekodekan.
  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, navigasikan ke URL berikut untuk halaman detail token: http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_token_details. Di sini, Anda dapat mengamati bagaimana aplikasi menampilkan 401: unauthorized kesalahan alih-alih klaim token ID.

Tentang kode

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

Konten

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 Dibuat dengan HttpSession. 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

ConfidentialClientApplication Instans dibuat dalam file AuthHelper.java, seperti yang ditunjukkan dalam 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 instans:

  • ID Klien aplikasi.
  • Rahasia klien, yang merupakan persyaratan untuk Aplikasi Klien Rahasia.
  • Otoritas Azure AD B2C menggabungkan dengan yang sesuai UserFlowPolicy untuk pendaftaran, masuk, edit 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 dari proses masuk adalah mengirim permintaan ke /authorize titik akhir untuk penyewa Azure Active Directory B2C Anda. Instans MSAL4J ConfidentialClientApplication digunakan untuk membuat 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:

    • AuthorizationRequestUrlParameters: Parameter yang harus diatur untuk membangun AuthorizationRequestUrl.

    • REDIRECT_URI: Di mana Azure AD B2C mengalihkan browser - bersama dengan kode autentikasi - setelah mengumpulkan kredensial pengguna.

    • SCOPES: Cakupan adalah izin yang diminta oleh aplikasi.

      Biasanya, tiga cakupan openid profile offline_access sudah cukup untuk menerima respons token ID. 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 dalam file authentication.properties .

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

    • Prompt.SELECT_ACCOUNT: Azure AD B2C harus meminta pengguna untuk memilih akun yang ingin mereka autentikasi.

    • state: Variabel unik yang ditetapkan oleh aplikasi ke dalam sesi pada setiap permintaan token dan dihancurkan setelah menerima panggilan balik pengalihan Azure AD B2C yang sesuai. Variabel status memastikan bahwa permintaan Azure AD B2C ke /auth_redirect endpoint sebenarnya berasal dari permintaan otorisasi Azure AD B2C yang berasal dari aplikasi ini dan sesi ini, sehingga mencegah serangan CSRF. Ini dilakukan dalam file AADRedirectServlet.java .

    • nonce: Variabel unik yang ditetapkan oleh aplikasi ke dalam sesi pada setiap permintaan token, dan dihancurkan setelah menerima token yang sesuai. 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 valid ke titik akhir ini berisi kode otorisasi.

  3. Instans ConfidentialClientApplication 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:

    • 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 diekstrak dan klaim nonce divalidasi terhadap nonce yang disimpan dalam sesi, seperti yang ditunjukkan dalam contoh berikut:

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

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

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.

Langkah selanjutnya

Menyebarkan aplikasi Java WebLogic ke WebLogic di Azure Virtual Machines