Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Voraussetzungen
- Weitere Informationen finden Sie unter Performance in MSAL Browser. Dort werden die Techniken beschrieben, mit denen Ihre Anwendung die Performance des Tokenabrufs mit MSAL verbessern kann.
- Node.js
Messen der Leistung
Anwendungen, die die Leistung von Authentifizierungsflüssen in MSAL Node messen möchten, können dies manuell mithilfe der Leistungsmessungs-APIs von Node oder ähnlich tun. Nachfolgend finden Sie eine Liste mit einigen wichtigen Datenpunkten, die Sie sammeln können:
| Data | Bedeutung | Vorschläge |
|---|---|---|
authType |
acquireToken* API, die für die Tokenanforderung verwendet wird |
Wird zur Identifizierung der Verwendung verwendet. |
correlationId |
Korrelations-ID, die für die Tokenanforderung verwendet wird. Sie können dies über die correlationId Eigenschaft in AuthenticationResult abrufen. |
Wird zur Identifizierung der Verwendung verwendet. |
durationTotalInMs |
Gesamtaufwand für MSAL, einschließlich Netzwerkaufrufe und Cachezugriff | Alarm bei gesamter hoher Latenz (> 1 Sekunde). Der Wert hängt von der Tokenquelle ab. Aus dem Cache: ein Cachezugriff. Aus dem Netzwerk: zwei Cachezugriffe sowie zwei HTTP-Aufrufe. |
durationInCacheInMs |
Zeitaufwand für das Laden oder Speichern der Persistenz des Tokencaches (z. B. Redis). | Alarm bei Spitzenwerten. |
durationInHttpInMs |
Zeitaufwand für HTTP-Aufrufe an IdP (z. B. Microsoft Entra ID). Sie können einen benutzerdefinierten Netzwerkclient für eine präzisere Überwachung verwenden. Weitere Informationen finden Sie unter Konfigurations- und benutzerdefiniertes Netzwerkbeispiel | Alarm bei Spitzenwerten. |
tokenSource |
Quelle des Tokens (d. h. Cache vs Netzwerk). Sie können dies über die fromCache Eigenschaft in AuthenticationResult abrufen. |
Token werden wesentlich schneller aus dem Cache abgerufen (z. B. ~100 ms im Vergleich zu ~700 ms). Kann zur Überwachung der Cache-Trefferquote und zum Auslösen von Alarmen verwendet werden. Verwenden Sie zusammen mit durationTotalInMs. |
Beispiel:
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
}
});
Überlegungen zur Leistung für vertrauliche Clientanwendungen
Da vertrauliche Clientanwendungen in erster Linie mit serverseitigen Szenarien verwendet werden, die gleichzeitige Verarbeitung von Anforderungen umfassen, empfehlen wir, MSAL ConfidenticalClientApplication (CCA)-Instanzen auf jeden Benutzer, jede Anforderung oder Sitzung anzuwenden.
Eine neue CCA-Instanz für jede Anforderung bedeutet, dass der standardinterne Cache anfänglich keine Token oder Metadaten zum Abrufen von Token enthält. Daher sollte die von Ihnen erstellte CCA-Instanz vor der Tokenanforderung initialisiert werden, um Leistungseinbußen zu vermeiden.
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;
};
Weitere Informationen finden Sie unter (CCA) Web-API mit einem benutzerdefinierten verteilten Cache-Plug-In .