Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Prerequisites
- Raadpleeg Prestaties in MSAL Browser waarin de technieken worden beschreven die uw toepassing kan gebruiken om de prestaties van het verkrijgen van tokens te verbeteren met behulp van MSAL.
- Node.js
Prestaties meten
Toepassingen die de prestaties van verificatiestromen in MSAL Node willen meten, kunnen dit handmatig doen met behulp van de prestatiemeting-API's van Node of vergelijkbaar. Hieronder ziet u een lijst met enkele belangrijke gegevenspunten die u kunt verzamelen:
| Data | Meaning | Suggesties |
|---|---|---|
authType |
acquireToken* API die wordt gebruikt voor de tokenaanvraag |
Gebruik dit voor het identificeren van gebruik. |
correlationId |
Correlatie-id die wordt gebruikt voor de tokenaanvraag. U kunt dit verkrijgen via de correlationId eigenschap in AuthenticationResult |
Gebruik dit voor het identificeren van gebruik. |
durationTotalInMs |
Totale tijd die is besteed aan MSAL, inclusief netwerkgesprekken en cachetoegang | Waarschuwing bij algemeen hoge latentie (> 1 seconde). De waarde is afhankelijk van de tokenbron. Vanuit cache: één cachetoegang. Vanuit het netwerk: twee cachetoegangen plus twee HTTP-aanroepen. |
durationInCacheInMs |
Tijd die is besteed aan het laden of opslaan van de persistentie van de tokencache (bijvoorbeeld Redis). | Alarm bij pieken. |
durationInHttpInMs |
Tijd besteed aan het maken van HTTP-aanroepen naar IdP (bijvoorbeeld Microsoft Entra ID). U kunt een aangepaste netwerkclient gebruiken voor meer verfijnde bewaking. Zie Configuratie - en aangepaste netwerkvoorbeelden voor meer | Alarm bij pieken. |
tokenSource |
Bron van het token (bijvoorbeeld cache versus netwerk). U kunt dit verkrijgen via de fromCache eigenschap in AuthenticationResult |
Tokens worden veel sneller opgehaald uit de cache (bijvoorbeeld ~100 ms versus ~700 ms). Kan worden gebruikt voor het bewaken en alarmeren van cache hit ratio. Gebruik samen met durationTotalInMs. |
Voorbeeld:
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
}
});
Prestatieoverwegingen voor vertrouwelijke clienttoepassingen
Omdat vertrouwelijke clienttoepassingen voornamelijk worden gebruikt met scenario's aan de serverzijde met betrekking tot gelijktijdige verwerking van aanvragen, raden we u aan MSAL-exemplaren ConfidenticalClientApplication (CCA) te beperken tot elke gebruiker, aanvraag of sessie.
Een nieuw CCA-exemplaar voor elke aanvraag betekent dat de standaardcache in het geheugen in eerste instantie geen tokens of metagegevens bevat over het verkrijgen van tokens. Als zodanig moet het CCA-exemplaar dat u maakt, worden voorbereid voordat de tokenaanvraag wordt uitgevoerd om slechte prestaties te voorkomen.
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;
};
Zie (CCA) Web API met een aangepaste plug-in voor een gedistribueerde cache voor meer informatie.