Memahami otorisasi API dan penyimpanan token dalam cache
Desain portal perusahaan termasuk membaca profil pengguna yang masuk dari Microsoft Graph. Autentikasi mengidentifikasi pengguna ke portal, tetapi panggilan API juga memerlukan token akses dengan izin yang sesuai.
Unit ini menjelaskan jenis izin, cakupan, dan pola cache token MSAL4J sebagai ilustrasi. Ini tidak mengasumsikan bahwa aplikasi atau sesi masuk sedang berjalan.
Izin dan cakupan API
API yang dilindungi menentukan izin untuk fungsionalitas dan datanya. Microsoft Graph, misalnya, memiliki izin yang berbeda untuk membaca profil, membaca kalender, dan mengirim email. Aplikasi hanya meminta izin yang diperlukan untuk operasi yang dimaksudkan.
Microsoft Entra ID mendukung dua jenis izin:
| Jenis izin | Context | Persetujuan |
|---|---|---|
| Izin yang didelegasikan | Aplikasi bertindak atas nama pengguna yang masuk. Akses dibatasi oleh izin yang diberikan dan akses pengguna. | Pengguna atau administrator yang berwenang dapat memberikan persetujuan, tergantung pada kebijakan izin dan penyewa. |
| Izin aplikasi | Aplikasi bertindak sebagai dirinya sendiri tanpa pengguna yang masuk, seperti layanan latar belakang. | Persetujuan administrator diperlukan. |
Portal menggunakan yang didelegasikan User.Read untuk membaca profil pengguna yang masuk. Izin ini tidak memberikan akses ke data setiap pengguna atau sumber daya yang tidak terkait seperti kalender.
Scope menentukan akses yang diminta
Dalam permintaan otorisasi yang didelegasikan, cakupan OAuth 2.0 mengekspresikan izin permintaan aplikasi. Cakupan dapat mengidentifikasi sumber daya dan izin; misalnya, https://graph.microsoft.com/Calendars.Read meminta izin membaca kalender untuk Microsoft Graph.
Contohnya menggunakan cakupan User.Readtunggal . Untuk cakupan Microsoft Graph, pengidentifikasi sumber daya dapat dihilangkan, sehingga ini mewakili https://graph.microsoft.com/User.Read. Untuk informasi selengkapnya, lihat Cakupan dan izin.
Izin API yang dikonfigurasi, cakupan yang diminta, dan persetujuan berbeda. Menambahkan izin API ke pendaftaran aplikasi tidak memberikan persetujuan atau mengubah cakupan yang diminta oleh kode aplikasi.
Token akses khusus untuk API-nya
Token akses ditujukan untuk sumber daya tertentu. Token untuk Microsoft Graph tidak dapat dipertukarkan dengan token untuk API lain, dan token ID bukan pengganti token akses API.
MSAL4J memperoleh dan menyimpan token. Aplikasi ini menggunakan token untuk sumber daya yang dimaksudkan daripada mengurainya untuk membuat asumsi tentang identitas pengguna yang masuk atau memperlakukannya sebagai kode otorisasi yang dapat digunakan kembali.
Contoh akuisisi token secara diam-diam
Untuk permintaan selanjutnya, aplikasi web dapat meminta token kepada MSAL tanpa mengirim pengguna melalui interaksi masuk lain. Fragmen berikut diadaptasi dari AuthHelpercontoh referensi. Ini menggambarkan pemulihan cache terkait sesi dan meminta token untuk akun yang sudah diwakili dalam konteks tersebut.
final SilentParameters parameters = SilentParameters
.builder(Collections.singleton(Config.SCOPES), context.getAccount())
.build();
final ConfidentialClientApplication client = getConfidentialClientInstance();
client.tokenCache().deserialize(context.getTokenCache());
final IAuthenticationResult result = client.acquireTokenSilently(parameters).get();
SilentParameters mengidentifikasi cakupan dan akun yang diminta. Dalam sampel ini, Config.SCOPES berisi User.Read, dan context menyediakan akun dan cache berseri yang terkait dengan sesi yang diautentikasi. Ini adalah pembantu aplikasi sampel, bukan nilai yang perlu diperoleh pelajar.
Setelah cache dipulihkan, acquireTokenSilently mencoba memenuhi permintaan tanpa interaksi pengguna. Ini dapat mengembalikan token akses cache yang dapat digunakan atau menggunakan token refresh cache jika berlaku. "Diam" tidak selalu berarti bahwa tidak ada permintaan jaringan yang terjadi.
Fragmen ini menghilangkan persistensi cache di sekitarnya dan penanganan pengecualian. Jika MSAL menunjukkan bahwa interaksi pengguna diperlukan, aplikasi web memulai permintaan otorisasi baru dan memproses panggilan balik yang dihasilkan. Ini tidak menggunakan kembali kode otorisasi lama. Kegagalan lain, seperti error jaringan atau konfigurasi, memerlukan penanganan error yang tepat alih-alih loop masuk tanpa syarat.
Data cache token dan sesi berisi informasi sensitif. Aplikasi lengkap harus melindungi data tersebut, mengaitkannya dengan akun dan sesi yang benar, dan mempertahankan perubahan cache dengan tepat.
Menginterpretasikan hasil sebelum panggilan API
Akuisisi token yang berhasil menghasilkan IAuthenticationResult yang berisi token akses serta informasi tentang masa berlaku dan konteks akun. Untuk permintaan Microsoft Graph, aplikasi menyediakan token akses Graph ke klien HTTP atau penyedia autentikasi Graph-nya.
MSAL4J tidak membaca profil pengguna hanya dengan memperoleh token tersebut. Permintaan API terpisah melakukan operasi data.
Microsoft Graph menyediakan sumber daya
Microsoft Graph mengekspos data dan layanan cloud Microsoft melalui https://graph.microsoft.com. Titik /v1.0/me akhir mewakili pengguna yang masuk dan memerlukan konteks pengguna yang didelegasikan.
Unit berikutnya membahas contoh permintaan untuk endpoint tersebut dan permintaan setara melalui Java Graph SDK. Gambaran umum Microsoft Graph menjelaskan API yang lebih luas.