Teljesítmény az MSAL-csomópontban

Prerequisites

  • Tekintse meg az MSAL Böngésző teljesítményét , amely ismerteti azokat a technikákat, amelyekkel az alkalmazás javíthatja a jogkivonatok MSAL használatával történő beszerzésének teljesítményét.
  • Node.js

Teljesítménymérés

Azok az alkalmazások, amelyek meg szeretnék mérni a hitelesítési folyamatok teljesítményét az MSAL-csomópontban, ezt manuálisan, a Node teljesítménymérési API-jával vagy hasonló módon végezhetik el. Az alábbiakban felsorolunk néhány fontos adatpontot, amelyeket összegyűjthet:

Adatok Meaning Javaslatok
authType acquireToken* A tokenkéréshez használt API A használat azonosítására használható.
correlationId A tokenkérelemhez használt korrelációs azonosító. Ezt az correlationIdAuthenticationResult tulajdonságon keresztül szerezheti be A használat azonosítására használható.
durationTotalInMs Az MSAL-ben töltött teljes idő, beleértve a hálózati hívásokat és a gyorsítótár-hozzáférést Riasztás az általános nagy késésről (> 1 másodperc). Az érték a token forrásától függ. Gyorsítótárból: egy gyorsítótár-hozzáférés. Hálózatról: két gyorsítótár-hozzáférés és két HTTP-hívás.
durationInCacheInMs A token-gyorsítótár perzisztens tárolásának betöltésére vagy mentésére fordított idő (pl. Redis). Riasztás kiugrások esetén.
durationInHttpInMs Az idP-hez http-hívások indításával töltött idő (pl. Microsoft Entra ID). Az egyéni hálózati ügyfélprogramokkal részletesebb monitorozást végezhet. További információ: Konfiguráció és egyéni hálózati minta Riasztás kiugrások esetén.
tokenSource A token forrása (azaz gyorsítótár vagy hálózat). Ezt az fromCacheAuthenticationResult tulajdonságon keresztül szerezheti be A tokenek sokkal gyorsabban kérhetők le a gyorsítótárból (például ~100 ms, szemben a ~700 ms-mal). A gyorsítótár találati arányának figyelésére és riasztások beállítására használható. Használja együtt a durationTotalInMs elemmel.

Például:

    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
        }
    });

A bizalmas ügyfélalkalmazások teljesítményével kapcsolatos szempontok

Mivel a bizalmas ügyfélalkalmazásokat elsősorban kiszolgálóoldali forgatókönyvekben használják, amelyek a kérések egyidejű feldolgozását is magukban foglalják, javasoljuk, hogy az MSAL ConfidenticalClientApplication (CCA) példányokat hatókörbe foglalja minden felhasználóra, kérelemre vagy munkamenetre.

Az, hogy minden kéréshez új CCA-példány jön létre, azt jelenti, hogy annak alapértelmezett, memóriában tárolt gyorsítótára kezdetben sem tokeneket, sem a tokenek beszerzésének módjára vonatkozó metaadatokat nem tartalmaz. Ezért a gyenge teljesítmény elkerülése érdekében a létrehozott CCA-példányt a token igénylése előtt elő kell készíteni.

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;
};

További információkért lásd: egyéni elosztott gyorsítótár-bővítményt használó (CCA) webes API.

Lásd még