Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 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
- JDK versi 8 atau lebih tinggi
- Maven 3
- Penyewa Azure AD B2C. Untuk informasi selengkapnya, lihat Tutorial: Membuat penyewa Azure Active Directory B2C
- Akun pengguna di penyewa Azure AD B2C Anda.
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:
Masuk ke portal Azure.
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:
Navigasi ke portal Azure dan pilih Azure AD B2C.
Pilih Pendaftaran Aplikasi di panel navigasi, lalu pilih Pendaftaran baru.
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.
- Di bagian Nama , masukkan nama aplikasi yang bermakna untuk ditampilkan kepada pengguna aplikasi - misalnya,
Pilih Daftar untuk membuat aplikasi.
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.
Pilih Simpan untuk menerapkan perubahan.
Pada halaman pendaftaran aplikasi, pilih Sertifikat & rahasia di panel navigasi untuk membuka halaman tempat Anda dapat membuat rahasia dan mengunggah sertifikat.
Di bagian Rahasia klien, pilih Rahasia klien baru.
Ketik deskripsi - misalnya, rahasia aplikasi.
Pilih salah satu durasi yang tersedia: Dalam 1 tahun, Dalam 2 tahun, atau Tidak Pernah Kedaluwarsa.
Pilih Tambahkan. Nilai yang dihasilkan ditampilkan.
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.
Buka proyek di IDE Anda.
Buka file ./src/main/resources/authentication.properties.
aad.clientIdTemukan properti dan ganti nilai yang ada dengan ID aplikasi atauclientIdms-identity-b2c-java-servlet-webapp-authenticationaplikasi dari portal Azure.aad.secretTemukan properti dan ganti nilai yang ada dengan nilai yang Anda simpan selama pembuatanms-identity-b2c-java-servlet-webapp-authenticationaplikasi dari portal Azure.aad.scopesTemukan properti dan ganti clientId aplikasi yang ada dengan nilai yang Anda tempatkanaad.clientIddi langkah 1 bagian ini.aad.authorityTemukan properti dan ganti instansfabrikamb2cpertama dengan nama penyewa Azure AD B2C tempat Anda membuatms-identity-b2c-java-servlet-webapp-authenticationaplikasi di portal Azure.aad.authorityTemukan properti dan ganti instansfabrikamb2ckedua dengan nama penyewa Azure AD B2C tempat Anda membuatms-identity-b2c-java-servlet-webapp-authenticationaplikasi di portal Azure.aad.signInPolicyTemukan properti dan ganti dengan nama kebijakan alur pengguna pendaftaran/masuk yang Anda buat di penyewa Azure AD B2C tempat Anda membuatms-identity-b2c-java-servlet-webapp-authenticationaplikasi di portal Azure.aad.passwordResetPolicyTemukan properti dan ganti dengan nama kebijakan atur ulang alur pengguna kata sandi yang Anda buat di penyewa Azure AD B2C tempat Anda membuatms-identity-b2c-java-servlet-webapp-authenticationaplikasi di portal Azure.aad.editProfilePolicyTemukan properti dan ganti dengan nama kebijakan edit alur pengguna profil yang Anda buat di penyewa Azure AD B2C tempat Anda membuatms-identity-b2c-java-servlet-webapp-authenticationaplikasi 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:
Dalam sampel, temukan file application.properties atau authentication.properties tempat Anda mengonfigurasi ID klien, penyewa, URL pengalihan, dan sebagainya.
Dalam file ini, ubah referensi ke
localhost:8080ataulocalhost:8443ke URL dan port tempat WebLogic berjalan, yang secara default harus .localhost:7001Anda 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:
Mulai server WebLogic dengan menggunakan DOMAIN_NAME\bin\startWebLogic.cmd.
Navigasikan ke konsol web WebLogic di browser Anda di
http://localhost:7001/console.Buka Penyebaran Struktur > Domain, pilih Instal, pilih Unggah file Anda, lalu temukan file .war yang Anda buat dengan menggunakan Maven.
Pilih Instal penyebaran ini sebagai aplikasi, pilih Berikutnya, pilih Selesai, lalu pilih Simpan.
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 aplikasimsal4j-servlet-auth.Kembali ke Penyebaran Struktur>Domain, dan mulai aplikasi Anda.
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:
- Perhatikan status masuk atau keluar yang ditampilkan di tengah layar.
- Pilih tombol peka konteks di sudut. Tombol ini membaca Masuk saat Anda pertama kali menjalankan aplikasi.
- Pada halaman berikutnya, ikuti instruksi dan masuk dengan akun penyedia identitas pilihan Anda.
- Perhatikan bahwa tombol peka konteks sekarang mengatakan Keluar dan menampilkan nama pengguna Anda.
- Pilih Detail Token ID untuk melihat beberapa klaim token ID yang didekodekan.
- Anda juga memiliki opsi untuk mengedit profil Anda. Pilih tautan untuk mengedit detail seperti nama tampilan, tempat tinggal, dan profesi Anda.
- Gunakan tombol di sudut untuk keluar.
- 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 menampilkan401: unauthorizedkesalahan 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
UserFlowPolicyuntuk 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:
Langkah pertama dari proses masuk adalah mengirim permintaan ke
/authorizetitik akhir untuk penyewa Azure Active Directory B2C Anda. Instans MSAL4JConfidentialClientApplicationdigunakan 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_accesssudah 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 endpointsebenarnya 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.
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.
Instans
ConfidentialClientApplicationkemudian 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.
Jika
acquireTokenberhasil, 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);Jika nonce berhasil divalidasi, status autentikasi dimasukkan ke dalam sesi sisi server, memanfaatkan metode yang diekspos oleh
MsalAuthSessionkelas, 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 Active Directory B2C
- Rekomendasi dan praktik terbaik untuk Azure Active Directory B2C
- Sesi Azure AD B2C
- Microsoft Authentication Library (MSAL) untuk Java
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