Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Prerequisites
- MSAL kullanarak belirteç alma performansını geliştirmek için uygulamanızın kullanabileceği teknikleri özetleyen MSAL Tarayıcısında Performans konusuna bakın.
- Node.js
Performansı ölçme
MSAL Node'da kimlik doğrulama akışlarının performansını ölçmek isteyen uygulamalar, Node'un performans ölçüm API'lerini veya benzerlerini kullanarak bunu el ile yapabilir. Aşağıda, toplayabileceğiniz bazı önemli veri noktalarının listesi yer alır:
| Veri | Meaning | Öneriler |
|---|---|---|
authType |
acquireToken* Belirteç isteği için kullanılan API |
Kullanımı tanımlamak için kullanın. |
correlationId |
Belirteç isteği için kullanılan korelasyon kimliği. Bunu correlationId içindeki özelliği aracılığıyla alabilirsiniz |
Kullanımı tanımlamak için kullanın. |
durationTotalInMs |
Ağ çağrıları ve önbellek erişimi dahil olmak üzere MSAL'de harcanan toplam süre | Genel yüksek gecikme alarmı (> 1 saniye). Değer belirteç kaynağına bağlıdır. Önbellekten: 1 önbellek erişimi. Ağdan: iki önbellek erişimi ve iki HTTP çağrısı. |
durationInCacheInMs |
Belirteç önbelleğini yüklemek veya kaydetmek için harcanan süre (örneğin Redis üzerinde). | Ani artışlarda alarm. |
durationInHttpInMs |
IdP'ye HTTP çağrıları yapmak için harcanan süre (örneğin, Microsoft Entra ID). Daha ayrıntılı izleme için özel bir ağ istemcisi kullanabilirsiniz. Daha fazla bilgi için bkz. Yapılandırma ve özel ağ örneği | Ani artışlarda alarm. |
tokenSource |
Belirtecin kaynağı (önbellek ve ağ). Bunu fromCache içindeki özelliği aracılığıyla alabilirsiniz |
Belirteçler önbellekten çok daha hızlı alınır (ör. ~100 ms ile ~700 ms). Önbellek isabet oranını izlemek ve uyarı vermek için kullanılabilir.
durationTotalInMs ile birlikte kullanın. |
Örneğin:
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
}
});
Gizli istemci uygulamaları için performansla ilgili dikkat edilmesi gerekenler
Gizli istemci uygulamaları öncelikli olarak isteklerin eşzamanlı olarak işlenmesini içeren sunucu tarafı senaryolarla kullanıldığından, MSAL ConfidenticalClientApplication (CCA) örneklerini her kullanıcı, istek veya oturum için kapsamanızı öneririz.
Her istek için yeni bir CCA örneği, varsayılan bellek içi önbelleğinin başlangıçta belirteçlerin nasıl alınacağıyla ilgili herhangi bir belirteç veya meta veri içermeyeceği anlamına gelir. Bu nedenle, düşük performanstan kaçınmak için oluşturduğunuz CCA örneği belirteç isteğinden önce hazırlanmalıdır.
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;
};
Daha fazla bilgi için bkz. (CCA) Özel dağıtılmış önbellek eklentisi kullanan Web API'si .