Überwachen von Anwendungen mit MSAL.NET

Um sicherzustellen, dass Authentifizierungsdienste mit MSAL.NET ordnungsgemäß ausgeführt werden, bietet MSAL viele Möglichkeiten, das Verhalten zu überwachen, damit Probleme identifiziert und behoben werden können, bevor sie in der Produktion auftreten. Die falsche Verwendung von MSAL (was sich auf den Tokenlebenszyklus und cache bezieht) führt nicht zu sofortigen Fehlern, manchmal werden sie jedoch unter szenarien mit hohem Datenverkehr angezeigt, nachdem die App für einen bestimmten Zeitraum in der Produktion ist.

Wenn beispielsweise nur eine Instanz einer vertraulichen Clientanwendung verwendet wird und MSAL nicht für die Serialisierung des Tokencaches konfiguriert ist, wächst der Cache unbegrenzt weiter. Ein weiteres Problem tritt auf, wenn eine neue vertrauliche Clientanwendung erstellt und der Cache nicht verwendet wird, was zu Problemen wie Drosselung vom Identitätsanbieter führt. Empfehlungen zur angemessenen Verwendung von MSAL finden Sie unter "Hohe Verfügbarkeit".

Protokollierung

Eines der Tools, die MSAL zur Bekämpfung von Produktionsproblemen bereitstellt, besteht darin, Fehler zu protokollieren, wenn MSAL nicht ordnungsgemäß konfiguriert ist. Es ist wichtig, die Protokollierung nach Möglichkeit zu aktivieren, um Protokolle auf Fehler zu überwachen und bei der Diagnose problematischer Ereignisse zu helfen. Details finden Sie unter "Anmelden in MSAL.NET".

Die folgenden Fehler werden in MSAL protokolliert:

  • Bei Verwendung einer Autorisierungsstelle, die auf /common oder /organizations für die Authentifizierung mit Clientanmeldeinformation (AcquireTokenForClient(IEnumerable<String>)) endet.
    • Die aktuelle Autorisierungsstelle verwendet den Endpunkt /common oder /organizations, was nicht empfohlen wird. Weitere Informationen finden Sie unter Flows für Clientanmeldeinformationen.
  • Wenn der interne Standardtokencache verwendet wird, während vertrauliche Clientanwendungen verwendet werden.
    • Der von MSAL bereitgestellte Standardtokencache ist nicht für hohe Leistung bei der Verwendung in Confidential-Client-Anwendungen ausgelegt. Weitere Informationen finden Sie unter Token-Cache-Serialisierung in MSAL.NET.

Metriken

Zusätzlich zur Protokollierung stellt MSAL wichtige Metriken in AuthenticationResult.AuthenticationResultMetadata bereit. Weitere Details finden Sie unter Hinzufügen der Überwachung rund um MSAL-Vorgänge.

  • DurationTotalInMs – Gesamtzeit für den Erwerb eines Tokens durch MSAL, einschließlich Netzwerkaufrufe und Cachevorgängen. Erstellen Sie eine Warnung für die allgemeine hohe Latenz (mehr als 1 Sekunde). Beachten Sie, dass der erste Tokenakquisitionsaufruf in der Regel einen zusätzlichen HTTP-Aufruf vorgibt.

  • DurationInCacheInMs – Zeit für das Laden oder Speichern des Tokencaches, der vom App-Entwickler angepasst wird (z. B. in Redis speichern). Erstellen Sie eine Warnung bei Spitzenwerten.

    Note

    Informationen dazu, wie Sie den Tokencache anpassen, finden Sie unter Serialisierung des Tokencaches in MSAL.NET.

  • DurationInHttpInMs – Zeitaufwand für HTTP-Aufrufe an den Identitätsanbieter. Erstellen Sie eine Warnung bei Spitzenwerten.

  • TokenSource– gibt die Quelle des Tokens an – in der Regel der Cache oder der Identitätsanbieter. Token werden viel schneller aus dem Cache abgerufen (z. B. ~100 ms im Vergleich zu ~700 ms). Diese Metrik kann verwendet werden, um das Cachetrefferverhältnis zu überwachen.

  • CacheRefreshReason - gibt den Grund für das Abrufen des Zugriffstokens vom Identitätsanbieter an. Siehe CacheRefreshReason. In Verbindung mit TokenSource verwenden.

  • TokenEndpoint – der tatsächliche Tokenendpunkt-URI, der zum Abrufen des Tokens verwendet wird. Hilfreich, um zu verstehen, wie MSAL den Mandanten bei stillen Aufrufen und die Region bei regionalen Aufrufen ermittelt.

    Note

    Die Regionalisierung ist nur für interne Microsoft Anwendungen verfügbar.

  • RegionDetails – die Details zu der Region, die für den Anruf verwendet wird, z. B. die verwendete Region und alle Fehler bei der automatischen Erkennung.

    Note

    Die Regionalisierung ist nur für interne Microsoft Anwendungen verfügbar.

OpenTelemetry

Ab MSAL 4.58.0 unterstützt die Bibliothek OpenTelemetry – eine Reihe von APIs, die Instrumentierung, Generierung und Sammlung von Telemetriedaten auf konsistente und standardisierte Weise ermöglichen. Um zu beginnen, stellen Sie sicher, dass Sie;

  1. Installieren Sie die neueste Version von MSAL.NET.
  2. Fügen Sie dem Projekt die OpenTelemetry-Paketabhängigkeit hinzu.
  3. Fügen Sie eine Exporterabhängigkeit hinzu, mit der Sie Protokolle exportieren können, z. B. den Konsolenexportierer für OpenTelemetry.NET.

Note

Während der Konsolenexporteur ein guter Start für lokales Debuggen und Diagnosen ist, ist es nicht die beste Wahl für in der Produktion bereitgestellte Anwendungen. Wir empfehlen, die offizielle Exporterdokumentation auszuchecken, um mehr über die verfügbaren Optionen zu erfahren. Wenn Sie Anwendungen auf Azure hosten, können Sie die Aufnahme von OpenTelemetry-Daten in Azure Data Explorer oder Azure Monitor in Betracht ziehen.

Deklarieren Sie in Ihrem Anwendungsinitialisierungscode vor dem Bootstrapping des MSAL-Authentifizierungsclients (z. B PublicClientApplication . oder ConfidentialClientApplication), eine neue MeterProvider Instanz, indem Sie den folgenden Code verwenden.

using var meterProvider = Sdk.CreateMeterProviderBuilder()
    .AddMeter("MicrosoftIdentityClient_Common_Meter")
    .AddConsoleExporter()
    .Build();

Dadurch wird der Zähleranbieter initialisiert und der integrierte MSAL.NET Meter (MicrosoftIdentityClient_Common_Meter) verwendet, der eine Reihe von Zählern und Histogrammen erfasst. Wenn Sie einen Konsolen-Exporter verwenden, sollten Sie sehen, dass die Ausgabe direkt im Terminal ausgegeben wird:

Beispiel für die Ausgabe von Metriken durch OpenTelemetry im Terminal

Im folgenden Abschnitt werden die unterstützten Zähler und Histogramme für den Standardzähler beschrieben.

Zähler

msalsuccess_counter

Zähler zur Erfassung der Gesamtzahl erfolgreicher Anforderungen in MSAL.

Metadaten
Feld Description
MsalVersion Verwendete Version von MSAL.
Platform Verwendete .NET-SKU.
ApiId ID für die API, die für die Tokenakquisition verwendet wird.
TokenSource Quelle des Tokens (z. B. Identitätsanbieter oder Cache).
CacheRefreshReason Grund für die Cacheaktualisierung.
CacheLevel L1, L2 oder Unbekannt, wenn der benutzerdefinierte Cache verwendet wird, die Ebene jedoch nicht aufgezeichnet wird.

msalfailure_counter

Zähler zur Erfassung der Gesamtzahl fehlgeschlagener Anforderungen in MSAL.

Metadaten
Feld Description
MsalVersion Verwendete MSAL-Version.
Platform Verwendete .NET-SKU.
ErrorCode Microsoft Entra ID-Fehlercode im Fall von MsalServiceException, MsalErrorCode im Fall von MsalClientException oder Name der Ausnahme, wenn es sich nicht um ein MsalException handelt.
ApiId ID für die API, die für die Tokenakquisition verwendet wird.
CacheRefreshReason Grund für die Cacheaktualisierung.

Histogramme

MsalTotalDuration_1a_histogram

Histogramm zum Erfassen der Gesamtlatenz in Millisekunden für die Tokenerfassung über MSAL.

Metadaten
Feld Description
MsalVersion Verwendete MSAL-Version
Platform Verwendete .NET-SKU.
ApiId ID für die API, die für die Tokenakquisition verwendet wird.
CacheLevel L1, L2 oder Unbekannt, wenn der benutzerdefinierte Cache verwendet wird, aber die Ebene nicht aufgezeichnet wird.
TokenSource Quelle des Tokens (z. B. Identitätsanbieter oder Cache).
CacheRefreshReason Grund für die Cacheaktualisierung.

MsalDurationInL1CacheInUs_1b_histogram

Histogramm zum Erfassen der Latenz, wenn ein L1-Cache verwendet wird. Die Werte befinden sich in Mikrosekunden für die Tokenerfassung über MSAL.

Metadaten
Feld Description
MsalVersion Verwendete Version von MSAL.
Platform Verwendete .NET-SKU.
ApiId ID für die API, die für die Tokenakquisition verwendet wird.
CacheLevel L1, L2 oder Unbekannt, wenn der benutzerdefinierte Cache verwendet wird, aber die Ebene nicht aufgezeichnet wird.
TokenSource Quelle des Tokens (z. B. Identitätsanbieter oder Cache).
CacheRefreshReason Grund für die Cacheaktualisierung.

MsalDurationInL2Cache_1a_histogram

Histogramm zum Erfassen der L2-Cachelatenz in Millisekunden für die Tokenerfassung über MSAL.

Metadaten
Feld Description
MsalVersion Verwendete MSAL-Version.
Platform .NET-SKU verwendet.
ApiId ID für die API, die für die Tokenakquisition verwendet wird.
CacheRefreshReason Grund für die Cacheaktualisierung.

MsalDurationInHttp_1a_histogram

Histogramm zum Erfassen der HTTP-Latenz in Millisekunden für die Tokenerfassung über MSAL.

Metadaten
Feld Description
MsalVersion Verwendete MSAL-Version.
Platform Verwendete .NET-SKU.
ApiId ID für die API, die für die Tokenakquisition verwendet wird.

Zusatzinformation

Weitere Informationen zur Verwendung von OpenTelemetry mit .NET Anwendungen finden Sie unter .NET Observability mit OpenTelemetry.