Memperoleh dan menggunakan token akses

Sebelum Anda memperoleh token akses, pastikan Anda memahami cara menginisialisasi objek aplikasi. Penting juga untuk memahami hubungan antara token akses dan sumber daya.

Di MSAL, Anda dapat memperoleh token akses untuk API yang perlu dipanggil oleh aplikasi Anda menggunakan metode acquireToken* yang disediakan oleh pustaka. Metode acquireToken* mengabstraksi 2 langkah yang terlibat dalam memperoleh token dengan alur kode otorisasi OAuth 2.0:

  1. mengajukan permintaan ke Microsoft Entra ID untuk mendapatkan authorization code
  2. menukar kode tersebut dengan token akses yang berisi cakupan yang disetujui pengguna

Memperoleh Token Akses

Pilih Jenis Interaksi

Lihat di sini jika Anda tidak yakin tentang perbedaan antara acquireTokenRedirect dan acquireTokenPopup.

Menyiapkan objek permintaan

Anda harus meneruskan objek permintaan ke acquireToken* API. Objek ini memungkinkan Anda menggunakan parameter yang berbeda dalam permintaan. Lihat di sini untuk informasi selengkapnya tentang parameter objek permintaan. Cakupan diperlukan untuk semua acquireToken* panggilan.

Periksa cache

MSAL menggunakan cache untuk menyimpan token berdasarkan parameter tertentu termasuk cakupan, sumber daya dan otoritas, dan akan mengambil token dari cache saat diperlukan. Ini juga dapat melakukan pembaruan diam-diam pada token tersebut saat token itu telah kedaluwarsa. MSAL menyediakan fungsionalitas ini melalui metode acquireTokenSilent.

Setelah Anda masuk dengan salah ssoSilent satu ATAU login* API, cache akan berisi sekumpulan ID, akses, dan token refresh. Setiap kali Anda memerlukan token akses yang harus Anda panggil acquireTokenSilent dan jika ini gagal memanggil API interaktif sebagai gantinya. acquireTokenSilent akan mencari token yang valid di cache, dan jika hampir kedaluwarsa atau tidak ada, akan secara otomatis mencoba menyegarkannya untuk Anda menggunakan token refresh yang di-cache. Anda dapat membaca selengkapnya tentang menggunakan acquireTokenSilentdi sini.

var request = {
    scopes: ["User.Read"],
};

msalInstance.acquireTokenSilent(request).then(tokenResponse => {
    // Do something with the tokenResponse
}).catch(async (error) => {
    if (error instanceof InteractionRequiredAuthError) {
        // fallback to interaction when silent call fails
        return msalInstance.acquireTokenPopup(request);
    }

    // handle other errors
})

Redirect

var request = {
    scopes: ["User.Read"],
};

msalInstance.acquireTokenSilent(request).then(tokenResponse => {
    // Do something with the tokenResponse
}).catch(error => {
    if (error instanceof InteractionRequiredAuthError) {
        // fallback to interaction when silent call fails
        return msalInstance.acquireTokenRedirect(request)
    }

    // handle other errors
});

Menggunakan Token Akses

Setelah mengambil token akses, Anda harus menyertakannya dalam header Authorization sebagai token bearer untuk permintaan ke sumber daya yang tokennya Anda peroleh, seperti yang ditunjukkan di bawah ini:

var headers = new Headers();
var bearer = "Bearer " + tokenResponse.accessToken;
headers.append("Authorization", bearer);
var options = {
        method: "GET",
        headers: headers
};
var graphEndpoint = "https://graph.microsoft.com/v1.0/me";

fetch(graphEndpoint, options)
    .then(resp => {
        //do something with response
    });

Praktik terbaik akuisisi token MSAL

Berikut adalah praktik terbaik untuk mendapatkan token dengan MSAL guna menghindari kesalahan, penurunan performa, dan masalah kemudahan penggunaan. Skenario tertentu dapat memberikan pengecualian untuk ini.

Gunakan satu instans PublicClientApplication

Buat instans satu PublicClientApplication per aplikasi dan gunakan instans yang sama di seluruh aplikasi Anda. Ini memastikan bahwa ada satu sumber kebenaran untuk apa yang dilakukan MSAL pada waktu tertentu (lihat: Peristiwa MSAL) dan menghilangkan kemungkinan objek aplikasi yang berbeda membuat permintaan interaktif paralel atau potensi konflik cache, yang dapat merusak aplikasi, mengurangi performa atau menghambat pengalaman pengguna.

Selalu tunggu janji untuk diselesaikan

Semua API MSAL acquireToken* maupun login* menjalankan operasi asinkron dan mengembalikan promise. Anda harus selalu menunggu janji ini diselesaikan sebelum melakukan tugas lain yang bergantung pada status autentikasi atau token, seperti merender informasi pengguna, memanggil API yang dilindungi atau memanggil API MSAL lainnya.

Coba permintaan senyap terlebih dahulu, lalu interaktif

Saat meminta token, selalu gunakan acquireTokenSilent terlebih dahulu, kembali ke akuisisi token interaktif jika diperlukan (misalnya, ketika InteractionRequiredAuthError dilemparkan).

Permintaan senyap bersamaan diizinkan. Jika dua atau lebih permintaan senyap dibuat secara bersamaan, hanya satu yang akan masuk ke jaringan (jika diperlukan), tetapi semua akan menerima respons, selama permintaan tersebut untuk parameter permintaan yang sama (misalnya cakupan).

Permintaan interaktif bersamaan tidak diizinkan. Jika dua atau lebih permintaan interaktif dibuat secara bersamaan, hanya yang pertama yang akan memulai interaksi, sementara sisanya akan gagal dengan kesalahan interaction_in_progress . Sebaiknya kenali kesalahan ini dan kemungkinan solusi agar tidak mengalaminya di aplikasi Anda.

Membuat satu permintaan token per sumber daya

Anda hanya dapat meminta token akses untuk satu sumber daya sekaligus (lihat sumber daya dan cakupan). Jika diperlukan, Anda dapat meminta persetujuan pengguna untuk cakupan (izin) yang diperlukan oleh lebih dari satu sumber daya dengan menggunakan extraScopesToConsent parameter di objek permintaan. Token akses untuk cakupan yang disetujui sebelumnya dapat diperoleh secara diam-diam.

Langkah Selanjutnya