Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Pré-requisitos
- Consulte o Desempenho no MSAL Browser , que descreve as técnicas que a sua aplicação pode usar para melhorar o desempenho da aquisição de tokens usando MSAL.
- Node.js
Medir desempenho
Aplicações que pretendam medir o desempenho dos fluxos de autenticação no MSAL Node podem fazê-lo manualmente, utilizando as APIs de medição de desempenho do Node ou similares. Abaixo está uma lista de alguns pontos de dados notáveis que pode recolher:
| Dados | Meaning | Sugestões |
|---|---|---|
authType |
acquireToken* API usada para o pedido de token |
Utilizar para identificar a utilização. |
correlationId |
ID de correlação usado para o pedido de token. Pode obter isto através da correlationId propriedade em AuthenticationResult |
Utilizar para identificar a utilização. |
durationTotalInMs |
Tempo total gasto em MSAL, incluindo chamadas de rede e acesso à cache | Alarme com latência geral elevada (> 1 segundo). O valor depende da origem do token. Do cache: um acesso ao cache. Da rede: dois acessos à cache mais duas chamadas HTTP. |
durationInCacheInMs |
Tempo gasto a carregar ou guardar a persistência da cache do token (por exemplo, Redis). | Alarme em caso de picos. |
durationInHttpInMs |
Tempo gasto a fazer chamadas HTTP para IdP (por exemplo, Microsoft Entra ID). Podes usar um cliente de rede personalizado para monitorização mais detalhada. Veja Configuração e exemplo de rede personalizada para mais informações | Alarme em caso de picos. |
tokenSource |
Origem do token (ou seja, cache vs rede). Pode obter isto através da fromCache propriedade em AuthenticationResult |
Os tokens são recuperados da cache muito mais rapidamente (por exemplo, ~100 ms contra ~700 ms). Pode ser usado para monitorizar e emitir alertas para a taxa de acerto da cache. Use juntamente com durationTotalInMs. |
Por exemplo:
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
}
});
Considerações de desempenho para aplicações confidenciais de clientes
Como as aplicações cliente confidenciais são principalmente usadas em cenários do lado do servidor que envolvem processamento simultâneo de pedidos, recomendamos que as instâncias MSAL ConfidenticalClientApplication (CCA) sejam atribuídas a cada utilizador, pedido ou sessão.
Uma instância CCA nova para cada pedido significa que a sua cache predefinida em memória inicialmente não conterá quaisquer tokens ou metadados sobre como adquirir tokens. Assim, a instância CCA que criar deve estar preparada antes do pedido de token para evitar um desempenho fraco.
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;
};
Consulte (CCA) Web API usando um plugin de cache distribuído personalizado para mais informações.