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.
Prasyarat
- Lihat Performa di Browser MSAL yang menguraikan teknik yang dapat digunakan aplikasi Anda untuk meningkatkan performa akuisisi token menggunakan MSAL.
- Node.js
Mengukur kinerja
Aplikasi yang ingin mengukur performa alur autentikasi di MSAL Node dapat melakukannya secara manual, menggunakan API pengukuran performa Node atau sejenisnya. Di bawah ini adalah daftar beberapa poin data penting yang dapat Anda kumpulkan:
| Data | Meaning | Saran |
|---|---|---|
authType |
acquireToken* API yang digunakan untuk permintaan token |
Gunakan untuk mengidentifikasi penggunaan. |
correlationId |
ID korelasi yang digunakan untuk permintaan token. Anda dapat memperoleh ini melalui correlationId properti di AuthenticationResult |
Gunakan untuk mengidentifikasi penggunaan. |
durationTotalInMs |
Total waktu yang dihabiskan di MSAL, termasuk panggilan jaringan dan akses cache | Alarm pada latensi tinggi keseluruhan (> 1 detik). Nilai tergantung pada sumber token. Dari cache: satu akses cache. Dari jaringan: dua akses cache ditambah dua panggilan HTTP. |
durationInCacheInMs |
Waktu yang dihabiskan untuk memuat atau menyimpan persistensi cache token (misalnya Redis). | Alarm saat terjadi lonjakan. |
durationInHttpInMs |
Waktu yang dihabiskan untuk melakukan panggilan HTTP ke IdP (misalnya Microsoft Entra ID). Anda dapat menggunakan klien jaringan kustom untuk pemantauan yang lebih halus. Lihat Konfigurasi dan sampel jaringan kustom untuk informasi selengkapnya | Alarm saat terjadi lonjakan. |
tokenSource |
Sumber token (yaitu cache vs jaringan). Anda dapat memperoleh ini melalui fromCache properti di AuthenticationResult |
Token diambil dari cache jauh lebih cepat (misalnya ~ 100 ms versus ~ 700 ms). Dapat digunakan untuk memantau dan memberikan alarm terkait rasio hit cache. Gunakan bersama dengan durationTotalInMs. |
Contohnya:
const { PerformanceObserver, performance } = require('node:perf_hooks');
const perfObserver = new PerformanceObserver((items) => {
items.getEntries().forEach((entry) => {
console.log(entry);
})
});
perfObserver.observe({ entryTypes: ["measure"], buffered: true });
// ...
performance.mark("acquireTokenByClientCredential-start");
const tokenResponse = await msalInstance.acquireTokenByClientCredential({
scopes: ["User.Read.All"],
});
performance.mark("acquireTokenByClientCredential-end");
performance.measure("acquireTokenByClientCredential", {
start: "acquireTokenByClientCredential-start"
end: "acquireTokenByClientCredential-end"
detail: {
tokenSource: tokenResponse.fromCache
correlationId: tokenResponse.correlationId
}
});
Pertimbangan performa untuk aplikasi klien rahasia
Karena aplikasi klien rahasia terutama digunakan dengan skenario sisi server yang melibatkan pemrosesan permintaan secara bersamaan, kami sarankan untuk mencakup instans MSAL ConfidenticalClientApplication (CCA) untuk setiap pengguna, permintaan, atau sesi.
Instans CCA baru untuk setiap permintaan berarti cache dalam memori defaultnya awalnya tidak akan berisi token atau metadata apa pun tentang cara memperoleh token. Dengan demikian, instans CCA yang Anda buat harus disiapkan sebelum permintaan token untuk menghindari performa yang buruk.
import {
ConfidentialClientApplication,
AuthenticationResult,
CryptoProvider,
OnBehalfOfRequest
} from "@azure/msal-node";
function getMsalInstance(partitionKey: string): ConfidentialClientApplication {
return new ConfidentialClientApplication({
auth: {
clientId: "ENTER_CLIENT_ID",
authority: "http://login.microsoftonline.com/ENTER_TENANT_ID"
cloudDiscoveryMetadata: "PROVIDE_STRINGIFIED_DISCOVERY_METADATA"
authorityMetadata: "PROVIDE_STRINGIFIED_AUTHORITY_METADATA"
},
cache: {
cachePlugin: new CustomCachePlugin(
this.cacheClientWrapper,
partitionKey
)
}
});
};
async function getToken(tokenRequest: OnBehalfOfRequest): Promise<AuthenticationResult | null> {
const partitionKey = await this.cryptoProvider.hashString(tokenRequest.oboAssertion);
const cca = getMsalInstance(partitionKey);
let tokenResponse = null;
try {
await cca.getTokenCache().getAllAccounts(); // required for cache read
tokenResponse = await cca.acquireTokenOnBehalfOf(tokenRequest);
} catch (error) {
throw error;
}
return tokenResponse;
};
Lihat API Web (CCA) menggunakan plugin cache terdistribusi kustom untuk informasi selengkapnya.