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 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:
Navigasikan ke file authentication.properties aplikasi Anda dan ubah nilai
app.homePageke 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/Setelah menyimpan file ini, gunakan perintah berikut untuk membangun kembali aplikasi Anda:
mvn clean packageSetelah 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.
Navigasikan ke halaman platform identitas Microsoft untuk pengembang Pendaftaran aplikasi.
Gunakan kotak pencarian untuk mencari pendaftaran aplikasi Anda - misalnya,
java-servlet-webapp-authentication.Buka pendaftaran aplikasi Anda dengan memilih namanya.
Pilih Autentikasi dari menu.
Di bagian URI Pengalihan Web - , pilih Tambahkan URI.
Isi URI aplikasi Anda, tambahkan /auth/redirect - misalnya,
https://<server-url>:<port-number>/auth/redirect.Pilih Simpan.
Gunakan langkah-langkah berikut untuk menyebarkan sampel menggunakan Konsol Solusi Terintegrasi WebSphere:
Pada tab Aplikasi , pilih Aplikasi Baru, lalu Aplikasi Perusahaan Baru.
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.
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 harusmsal4j-servlet-auth.Pilih Selesai.
Setelah aplikasi selesai diinstal, buka bagian Aplikasi perusahaan WebSphere di tab Aplikasi .
Pilih file .war yang Anda instal dari daftar aplikasi lalu pilih Mulai untuk menyebarkan.
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:
- 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:
| File/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 WebSphere ke WebSphere Tradisional di Azure Virtual Machines