Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wymagania wstępne
- Zapoznaj się z tematem Performance in MSAL Browser (Wydajność w przeglądarce MSAL ), która zawiera opis technik, których aplikacja może użyć do zwiększenia wydajności pozyskiwania tokenów przy użyciu biblioteki MSAL.
- Node.js
Mierzenie wydajności
Aplikacje, które chcą mierzyć wydajność przepływów uwierzytelniania w MSAL Node, mogą robić to ręcznie, korzystając z interfejsów API Node.js do pomiaru wydajności lub podobnych. Poniżej znajduje się lista niektórych istotnych punktów danych, które można zebrać:
| Data | Meaning | Sugestie |
|---|---|---|
authType |
acquireToken* Interfejs API używany na potrzeby żądania tokenu |
Służy do identyfikowania użycia. |
correlationId |
Identyfikator korelacji używany dla żądania tokenu. Można to uzyskać za pośrednictwem correlationId właściwości AuthenticationResult |
Służy do identyfikowania użycia. |
durationTotalInMs |
Łączny czas spędzony w usłudze MSAL, w tym wywołania sieciowe i dostęp do pamięci podręcznej | Alarm dotyczący ogólnego dużego opóźnienia (> 1 sekunda). Wartość zależy od źródła tokenu. Z pamięci podręcznej: jeden dostęp do pamięci podręcznej. Z sieci: dwa odwołania do pamięci podręcznej oraz dwa wywołania HTTP. |
durationInCacheInMs |
Czas spędzony na ładowaniu lub zapisywaniu trwałości pamięci podręcznej tokenu (np. Redis). | Alarm dotyczący skoków. |
durationInHttpInMs |
Czas poświęcony na wykonywanie wywołań HTTP do dostawcy tożsamości (IdP), np. Microsoft Entra ID. Możesz użyć niestandardowego klienta sieciowego do bardziej szczegółowego monitorowania. Zobacz Przykład konfiguracji i niestandardowej sieci, aby uzyskać więcej informacji | Alarm dotyczący skoków. |
tokenSource |
Źródło tokenu (tj. pamięć podręczna a sieć). Można to uzyskać za pośrednictwem fromCache właściwości AuthenticationResult |
Tokeny są pobierane z pamięci podręcznej znacznie szybciej (np. ~100 ms w porównaniu z ok. 700 ms). Może służyć do monitorowania współczynnika trafień pamięci podręcznej i alarmowania o nim. Użyj razem z durationTotalInMs. |
Przykład:
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
}
});
Zagadnienia dotyczące wydajności poufnych aplikacji klienckich
Ponieważ poufne aplikacje klienckie są używane głównie w scenariuszach po stronie serwera obejmujących współbieżne przetwarzanie żądań, zalecamy określanie zakresu wystąpień biblioteki MSAL ConfidenticalClientApplication (CCA) dla każdego użytkownika, żądania lub sesji.
Nowe wystąpienie CCA dla każdego żądania oznacza, że jego domyślna pamięć podręczna w pamięci początkowo nie będzie zawierać żadnych tokenów ani metadanych dotyczących sposobu uzyskiwania tokenów. W związku z tym instancję CCA, którą tworzysz, należy przygotować przed wysłaniem żądania tokenu, aby uniknąć spadku wydajności.
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;
};
Zobacz (CCA) interfejs API sieci Web używający niestandardowej wtyczki rozproszonej pamięci podręcznej, aby uzyskać więcej informacji.