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 mendemonstrasikan aplikasi Java WebLogic yang mengautentikasi pengguna dan memperoleh token akses untuk memanggil Microsoft Graph. Ini menggunakan Pustaka Autentikasi Microsoft (MSAL) untuk Java.
Diagram berikut menunjukkan topologi aplikasi:
Diagram yang memperlihatkan topologi aplikasi.
Aplikasi klien menggunakan MSAL for Java (MSAL4J) untuk mengautentikasi pengguna dan memperoleh token akses untuk Microsoft Graph dari Microsoft Entra ID. Token akses membuktikan bahwa pengguna berwenang untuk mengakses titik akhir Microsoft Graph API seperti yang didefinisikan dalam cakupan.
Prasyarat
- Java 8 atau lebih tinggi
- Maven 3
- Penyewa Microsoft Entra ID. Untuk informasi selengkapnya, lihat Cara mendapatkan tenant Microsoft Entra ID.
- Akun pengguna di tenant Microsoft Entra ID milik Anda sendiri jika Anda ingin bekerja dengan akun hanya di direktori organisasi Anda—yaitu dalam mode single-tenant. Jika Anda belum membuat akun pengguna di penyewa, Anda harus melakukannya sebelum melanjutkan. Untuk informasi lebih lanjut, lihat Cara membuat, mengundang, dan menghapus pengguna.
- Akun pengguna di tenant Microsoft Entra ID milik organisasi mana pun jika Anda ingin mengelola akun di direktori organisasi mana pun—yaitu, dalam mode multitenant. Sampel ini harus dimodifikasi agar berfungsi dengan akun Microsoft pribadi. Jika Anda belum membuat akun pengguna di penyewa, Anda harus melakukannya sebelum melanjutkan. Untuk informasi lebih lanjut, lihat Cara membuat, mengundang, dan menghapus pengguna.
- Akun Microsoft pribadi - misalnya, Xbox, Hotmail, Live, dan sebagainya - jika Anda ingin bekerja dengan akun Microsoft pribadi.
- WebLogic
- 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/2-Authorization-I/call-graph
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.
Daftarkan aplikasi sampel dengan tenant 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:
Masuk ke portal Azure.
Jika akun Anda terdapat di lebih dari satu penyewa Microsoft Entra ID, pilih profil Anda di sudut portal Azure, lalu pilih Alihkan direktori untuk mengalihkan sesi Anda ke penyewa Microsoft Entra ID yang diinginkan.
Mendaftarkan aplikasi (java-servlet-webapp-call-graph)
Pertama, daftarkan aplikasi baru di portal Azure dengan mengikuti petunjuk dalam Mulai cepat: Mendaftarkan aplikasi dengan platform identitas Microsoft.
Kemudian, gunakan langkah-langkah berikut untuk menyelesaikan pendaftaran:
Buka halaman platform identitas Microsoft untuk pengembang Pendaftaran aplikasi.
Pilih Pendaftaran baru.
Di halaman Daftarkan aplikasi yang muncul, masukkan informasi pendaftaran aplikasi berikut ini:
Di bagian Name, masukkan nama aplikasi yang jelas dan akan ditampilkan kepada pengguna aplikasi - misalnya, .
Di bawah Jenis akun yang didukung, pilih salah satu opsi berikut:
- Pilih Akun hanya di direktori organisasi ini jika Anda membuat aplikasi yang hanya akan digunakan oleh pengguna di tenant Anda — yakni, aplikasi penyewa tunggal.
- Pilih Akun di direktori organisasi mana pun jika Anda ingin pengguna di tenant Microsoft Entra ID mana pun dapat menggunakan aplikasi Anda—yaitu aplikasi multitenant.
- Pilih Akun di direktori organisasi mana pun dan akun Microsoft pribadi untuk cakupan pelanggan terluas - yaitu, aplikasi multipenyewa yang juga mendukung akun Microsoft pribadi.
Pilih akun Microsoft pribadi untuk digunakan hanya oleh pengguna akun Microsoft pribadi - misalnya, akun Hotmail, Live, Skype, dan Xbox.
Pada bagian URI Pengalihan, pilih Web di kotak kombo dan masukkan URI pengalihan berikut: .
Pilih Daftar untuk membuat aplikasi.
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.
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 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.
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.
Pada halaman pendaftaran aplikasi, pilih izin API dari panel navigasi untuk membuka halaman untuk menambahkan akses ke API yang dibutuhkan aplikasi Anda.
Pilih Tambahkan izin.
Pastikan bahwa tab API Microsoft dipilih.
Di bagian Microsoft API yang umum digunakan, pilih Microsoft Graph.
Di bagian Izin yang didelegasikan, pilih User.Read dari daftar. Gunakan kotak pencarian jika perlu.
Pilih Tambahkan izin.
Konfigurasikan aplikasi (java-servlet-webapp-call-graph) untuk menggunakan registrasi aplikasi Anda
Gunakan langkah-langkah berikut untuk mengonfigurasi aplikasi:
Catatan
Pada langkah-langkah berikut, sama dengan atau .
Buka proyek di IDE Anda.
Buka file ./src/main/resources/authentication.properties.
Temukan string . Ganti nilai yang sudah ada dengan salah satu nilai berikut:
- ID tenant Microsoft Entra ID Anda jika Anda mendaftarkan aplikasi Anda dengan opsi Akun hanya di direktori organisasi ini.
- Kata jika Anda mendaftarkan aplikasi Anda dengan opsi Akun di direktori organisasi mana pun.
- Kata jika Anda mendaftarkan aplikasi Anda dengan opsi Akun di direktori organisasi mana pun dan akun Microsoft pribadi.
- Gunakan kata jika Anda mendaftarkan aplikasi Anda dengan opsi Akun Microsoft Pribadi.
Temukan string dan ganti nilai yang ada dengan ID aplikasi atau dari aplikasi yang disalin dari portal Azure.
Temukan string dan ganti nilai yang sudah ada dengan nilai yang Anda simpan saat 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.
Menyebarkan 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 contoh, temukan file application.properties atau authentication.properties tempat Anda mengonfigurasi ID klien, tenant, URL pengalihan, dan sebagainya.
Dalam file ini, ubah referensi ke atau menjadi URL dan port yang digunakan oleh WebLogic, yang secara default seharusnya .
Anda juga perlu membuat perubahan yang sama di registrasi aplikasi Azure, tempat Anda menetapkannya di portal Azure sebagai nilai Redirect URI pada tab Authentication.
Gunakan langkah-langkah berikut untuk menyebarkan sampel ke WebLogic melalui konsol web:
Mulai server WebLogic dengan DOMAIN_NAME\bin\startWebLogic.cmd.
Buka konsol web WebLogic melalui browser Anda di .
Buka Domain StructureDeployments, pilih Instal, pilih Unggah file Anda, lalu temukan file .war yang Anda buat 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 , maka Anda harus menamai aplikasi .
Kembali ke Struktur DomainPenerapan, lalu jalankan aplikasi Anda.
Setelah aplikasi dijalankan, buka , dan Anda seharusnya dapat mengakses aplikasi.
Jelajahi contoh
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 bertuliskan Masuk saat pertama kali Anda menjalankan aplikasi.
- Pada halaman berikutnya, ikuti instruksi dan masuk menggunakan akun dalam tenant Microsoft Entra ID.
- Pada layar persetujuan, perhatikan cakupan yang diminta.
- Perhatikan bahwa tombol peka konteks sekarang mengatakan Keluar dan menampilkan nama pengguna Anda.
- Pilih Detail Token ID untuk melihat beberapa klaim yang telah didekode dari token ID.
- Pilih Call Graph untuk membuat panggilan ke titik akhir /me Microsoft Graph dan melihat sebagian detail pengguna yang diperoleh.
- Gunakan tombol di sudut untuk keluar.
Tentang kode
Sampel ini menggunakan MSAL for Java (MSAL4J) untuk memasukkan pengguna dan mendapatkan token untuk Microsoft Graph API. Ini menggunakan Microsoft Graph SDK for Java untuk memperoleh data dari Graph. Anda harus menambahkan pustaka ini ke proyek Anda menggunakan Maven.
Jika Anda ingin mereplikasi perilaku sampel ini, 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 bagian lain dari sampel ini, tetapi kelas dan file lainnya dibuat khusus untuk memenuhi tujuan sampel ini.
Isi
Tabel berikut ini memperlihatkan konten folder proyek sampel:
| Berkas/Folder | Deskripsi |
|---|---|
| src/main/java/com/microsoft/azuresamples/msal4j/callgraphwebapp/ | Direktori ini berisi kelas yang menentukan logika bisnis backend aplikasi. |
| src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ | Direktori ini berisi kelas-kelas yang digunakan untuk endpoint login dan logout. |
| *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 bantu untuk autentikasi. |
| AuthenticationFilter.java | Mengalihkan permintaan yang belum diautentikasi ke endpoint 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. |
ConfidentialClientApplication
Sebuah instance dibuat di file AuthHelper.java, seperti yang ditunjukkan pada contoh berikut. Objek ini membantu membuat URL otorisasi ID 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 instansiasi:
- ID klien aplikasi.
- Rahasia klien, yang merupakan persyaratan untuk Aplikasi Klien Rahasia.
- Otoritas Microsoft Entra ID, yang mencakup ID tenant 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:
Langkah pertama dalam proses masuk adalah mengirim permintaan ke endpoint untuk tenant Microsoft Entra ID Anda. Instans MSAL4J digunakan untuk menyusun 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:
- : Parameter yang harus diatur untuk membuat .
- : Tempat Microsoft Entra ID mengalihkan browser—bersama kode otorisasi—setelah mengumpulkan kredensial pengguna. Ini harus sesuai dengan URI pengalihan dalam pendaftaran aplikasi Microsoft Entra ID di Azure portal
- : Cakupan izin merupakan izin yang diminta oleh aplikasi.
- Biasanya, ketiga cakupan sudah memadai untuk menerima respons ID token.
- Daftar lengkap cakupan yang diminta oleh aplikasi dapat ditemukan di file authentication.properties . Anda dapat menambahkan lebih banyak cakupan seperti .
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 endpoint ini berisi kode otorisasi.
Instans kemudian menukarkan kode otorisasi ini dengan token ID dan token akses dari Microsoft Entra ID.
// 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:
- : 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.
Jika berhasil, klaim token diekstrak. Jika pemeriksaan nonce berhasil, hasilnya ditempatkan dalam - sebuah instans dari - dan disimpan dalam sesi. Aplikasi kemudian dapat membuat instance dari sesi melalui instance setiap kali aplikasi memerlukan 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());
Melindungi rute
Untuk informasi tentang cara aplikasi sampel memfilter akses ke rute, lihat AuthenticationFilter.java. Dalam file authentication.properties, properti app.protect.authenticated berisi rute yang dipisahkan dengan koma dan hanya dapat diakses oleh pengguna yang terautentikasi, seperti yang ditunjukkan pada contoh berikut:
# for example, /token_details requires any user to be signed in and does not require special roles or groups claim(s)
app.protect.authenticated=/token_details, /call_graph
Grafik panggilan
Saat pengguna membuka , aplikasi membuat instans —dari Java Graph SDK—dengan meneruskan token akses pengguna yang sedang masuk. Klien Graph menempatkan token akses di header pada permintaannya. Aplikasi kemudian meminta klien Graph untuk memanggil endpoint guna mengembalikan detail pengguna yang saat ini masuk.
Jika Anda sudah memiliki token akses yang valid untuk Layanan Graph dengan cakupan , Anda hanya memerlukan kode berikut untuk mengakses endpoint :
//CallGraphServlet.java
User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();
Cakupan
Cakupan izin memberi tahu Microsoft Entra ID tentang tingkat akses yang diminta oleh aplikasi.
Berdasarkan cakupan yang diminta, MICROSOFT Entra ID menyajikan dialog persetujuan kepada pengguna saat masuk. Jika pengguna menyetujui satu atau beberapa scope dan memperoleh token, scope yang telah disetujui dikodekan ke dalam yang dihasilkan.
Untuk cakupan yang diminta oleh aplikasi, lihat authentication.properties. Secara bawaan, aplikasi menetapkan nilai scopes ke . Cakupan Microsoft Graph API khusus ini adalah untuk mengakses informasi pengguna yang masuk saat ini. Endpoint Graph untuk mengakses informasi ini adalah . Setiap permintaan valid yang dibuat ke endpoint ini harus menyertakan yang berisi scope dalam header .
Informasi selengkapnya
- Pustaka Autentikasi Microsoft (MSAL) untuk Java
- Platform Identitas Microsoft (Microsoft Entra ID untuk pengembang)
- Mulai Cepat: Mendaftarkan aplikasi di platform identitas Microsoft
- Memahami pengalaman persetujuan aplikasi Microsoft Entra ID
- Memahami persetujuan pengguna dan administrator
- Contoh kode MSAL
Langkah selanjutnya
Menyebarkan aplikasi Java WebLogic ke WebLogic di Azure Virtual Machines