Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Förutsättningar
- Se Prestanda i MSAL Browser som beskriver de tekniker som ditt program kan använda för att förbättra prestanda för tokenförvärv med hjälp av MSAL.
- Node.js
Mäta prestanda
Program som vill mäta prestanda för autentiseringsflöden i MSAL Node kan göra det manuellt med hjälp av Nodes API:er för prestandamätning eller liknande. Nedan visas en lista över några viktiga datapunkter som du kan samla in:
| data | Meaning | Suggestions |
|---|---|---|
authType |
acquireToken* API som används för tokenbegäran |
Används för att identifiera användning. |
correlationId |
Korrelations-ID som används för tokenbegäran. Du kan hämta detta via egenskapen correlationId i AuthenticationResult |
Används för att identifiera användning. |
durationTotalInMs |
Total tid i MSAL, inklusive nätverksanrop och cacheåtkomst | Larm om övergripande långa svarstider (> 1 sekund). Värdet beror på tokenkällan. Från cachen: en åtkomst till cachen. Från nätverket: två cacheåtkomster plus två HTTP-anrop. |
durationInCacheInMs |
Tid som används för att ladda eller spara den beständiga lagringen av tokencache (t.ex. Redis). | Larm vid toppar. |
durationInHttpInMs |
Tid som ägnas åt att göra HTTP-anrop till IdP (t.ex. Microsoft Entra ID). Du kan använda en anpassad nätverksklient för mer detaljerad övervakning. Mer information finns i Konfiguration och anpassat nätverksexempel | Larm vid toppar. |
tokenSource |
Källa för token (dvs. cache jämfört med nätverk). Du kan hämta detta via egenskapen fromCache i AuthenticationResult |
Token hämtas från cachen mycket snabbare (t.ex. ~100 ms jämfört med ~700 ms). Kan användas för att övervaka och varna för cacheträffförhållandet. Använd tillsammans med durationTotalInMs. |
Ett exempel:
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
}
});
Prestandaöverväganden för konfidentiella klientprogram
Eftersom konfidentiella klientprogram främst används med scenarier på serversidan som omfattar samtidig bearbetning av begäranden rekommenderar vi att MSAL-instanser ConfidenticalClientApplication (CCA) används för varje användare, begäran eller session.
En ny CCA-instans för varje begäran innebär att dess standardminnescache initialt inte innehåller några token eller metadata om hur du hämtar token. Därför bör den CCA-instans som du skapar förberedas före tokenbegäran för att undvika dåliga prestanda.
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;
};
Läs mer i CCA-webb-API med en anpassad plugin för distribuerad cache.