Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Prerequisites
- Consultez Performances dans MSAL Browser, qui présente les techniques que votre application peut utiliser pour améliorer les performances de l’obtention de jetons avec MSAL.
- Node.js
Mesure des performances
Les applications qui souhaitent mesurer les performances des flux d’authentification dans MSAL Node peuvent le faire manuellement, à l’aide des API de mesure des performances de Node ou similaires. Voici une liste de certains points de données notables que vous pouvez collecter :
| Data | Sens | Suggestions |
|---|---|---|
authType |
acquireToken* API utilisée pour la demande de jeton |
Permet d’identifier l’utilisation. |
correlationId |
ID de corrélation utilisé pour la demande de jeton. Vous pouvez l’obtenir via la correlationId propriété dans AuthenticationResult |
Permet d’identifier l’utilisation. |
durationTotalInMs |
Temps total passé dans MSAL, y compris les appels réseau et l’accès au cache | Alarme sur une latence élevée globale (> 1 seconde). La valeur dépend de la source du jeton. Depuis le cache : un accès au cache. À partir du réseau : deux accès au cache plus deux appels HTTP. |
durationInCacheInMs |
Temps passé au chargement ou à l’enregistrement de la persistance du cache de jetons (par exemple, Redis). | Alarme en cas de pic. |
durationInHttpInMs |
Temps passé à passer des appels HTTP à IdP (par exemple, Microsoft Entra ID). Vous pouvez utiliser un client réseau personnalisé pour une surveillance plus fine. Pour plus d’informations, consultez l’exemple de configuration et de réseau personnalisé | Alarme en cas de pic. |
tokenSource |
Source du jeton (par exemple, cache et réseau). Vous pouvez l’obtenir via la fromCache propriété dans AuthenticationResult |
Les jetons sont récupérés à partir du cache beaucoup plus rapidement (par exemple, ~100 ms par rapport à ~700 ms). Peut être utilisé pour surveiller et déclencher des alertes sur le taux de succès du cache. Utiliser avec durationTotalInMs. |
Par exemple:
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
}
});
Considérations relatives aux performances pour les applications clientes confidentielles
Étant donné que les applications clientes confidentielles sont principalement utilisées avec des scénarios côté serveur impliquant le traitement simultané des requêtes, nous vous recommandons d’étendre les instances MSAL ConfidenticalClientApplication (CCA) à chaque utilisateur, demande ou session.
Une nouvelle instance CCA pour chaque requête signifie que son cache en mémoire par défaut ne contiendra initialement pas de jetons ou de métadonnées sur la façon d’acquérir des jetons. Par conséquent, l’instance CCA que vous créez doit être initialisée avant de demander le jeton, afin d’éviter de mauvaises performances.
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;
};
Pour plus d’informations , consultez l’API web (CCA) à l’aide d’un plug-in de cache distribué personnalisé .