Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Pour garantir que les services d’authentification utilisant MSAL.NET s’exécutent correctement, MSAL fournit de nombreuses façons de surveiller son comportement afin que les problèmes puissent être identifiés et résolus avant qu’ils ne se produisent en production. L’utilisation incorrecte de MSAL (telle qu’elle concerne le cycle de vie des jetons et le cache) n’entraîne pas d’échecs immédiats, mais parfois ils se déclenchent dans des scénarios de trafic élevé une fois que l’application est en production pendant une période de temps.
Par exemple, si une seule instance d’une application cliente confidentielle est utilisée et que MSAL n’est pas configuré pour sérialiser le cache de jetons, le cache augmente à jamais. Un autre problème survient lorsqu’on crée une nouvelle application cliente confidentielle sans utiliser le cache, ce qui entraînera des problèmes tels que la limitation du débit par le fournisseur d’identité. Pour obtenir des recommandations sur l’utilisation appropriée de MSAL, consultez la haute disponibilité.
Logging
L’un des outils fournis par MSAL pour lutter contre les problèmes de production est la journalisation des erreurs lorsque MSAL n’est pas correctement configuré. Il est essentiel d’activer la journalisation chaque fois que possible afin de surveiller les journaux à la recherche d’erreurs et d’aider à diagnostiquer les événements problématiques. Pour plus d’informations, voir Journalisation dans MSAL.NET.
Les erreurs suivantes sont consignées dans MSAL :
- Lorsque vous utilisez une autorité se terminant par
/commonou/organizationspour l’authentification des informations d’identification du client (AcquireTokenForClient(IEnumerable<String>)).- L’autorité actuelle cible le point de terminaison
/commonou/organizations, ce qui n’est pas recommandé. Pour plus d’informations, consultez les flux d’informations d’identification du client .
- L’autorité actuelle cible le point de terminaison
- Lorsque le cache de jetons interne par défaut est utilisé lors de l’utilisation d’applications clientes confidentielles.
- Le cache de jetons par défaut fourni par MSAL n’est pas conçu pour être performant lorsqu’il est utilisé dans les applications clientes confidentielles. Pour plus d’informations, reportez-vous à la sérialisation du cache de jetons dans MSAL.NET.
Metrics
En plus de la journalisation, MSAL expose des métriques importantes dans AuthenticationResult.AuthenticationResultMetadata. Pour plus d’informations, consultez Ajouter une surveillance autour des opérations MSAL .
DurationTotalInMs : temps total consacré à l’acquisition d’un jeton par MSAL, y compris les appels réseau et les opérations de cache. Créez une alerte sur une latence élevée globale (plus de 1 seconde). Notez que le premier appel d’acquisition de jetons effectue généralement un appel HTTP supplémentaire.
DurationInCacheInMs - temps passé au chargement ou à l’enregistrement du cache de jetons, personnalisé par le développeur de l’application (par exemple, enregistrer dans Redis). Créez une alerte en cas de pic.
Note
Pour comprendre comment personnaliser la mise en cache des jetons, consultez la sérialisation du cache de jetons dans MSAL.NET.
DurationInHttpInMs - temps passé à effectuer des appels HTTP au fournisseur d’identité. Créez une alerte en cas de pic.
TokenSource- indique la source du jeton , généralement le cache ou le fournisseur d’identité. Les jetons sont récupérés à partir du cache beaucoup plus rapidement (par exemple, ~100 ms par rapport à ~700 ms). Cette métrique peut être utilisée pour surveiller le taux d’accès au cache.
CacheRefreshReason - spécifie la raison de la récupération du jeton d’accès auprès du fournisseur d’identité. Voir CacheRefreshReason. Utiliser conjointement avec
TokenSource.TokenEndpoint - l’URI réelle du point de terminaison du jeton utilisée pour récupérer le jeton. Utile pour comprendre comment MSAL détermine le locataire lors des appels silencieux et la région lors des appels régionaux.
Note
La régionalisation est disponible uniquement pour les applications Microsoft internes.
RegionDetails - les détails de la région utilisée pour effectuer un appel, tels que la région utilisée et toute erreur de détection automatique.
Note
La régionalisation est disponible uniquement pour les applications Microsoft internes.
OpenTelemetry
À compter de MSAL 4.58.0, la bibliothèque prend en charge OpenTelemetry , un ensemble d’API qui permettent l’instrumentation, la génération et la collecte de données de télémétrie de manière cohérente et standardisée. Pour commencer, vérifiez que vous ;
- Installez la dernière version de MSAL.NET.
- Ajoutez la dépendance de package OpenTelemetry à votre projet.
- Ajoutez une dépendance d’exportateur qui vous permet d’exporter des logs, par exemple, l’exportateur Console pour OpenTelemetry.NET.
Note
Bien que l’exportateur de console soit un bon point de départ pour le débogage et les diagnostics locaux, ce n’est pas le meilleur choix pour les applications déployées en production. Nous vous recommandons de consulter la documentation officielle de l’exportateur pour en savoir plus sur les options disponibles. Si vous hébergez des applications sur Azure, vous pouvez envisager d’ingérer des données OpenTelemetry dans Azure Data Explorer ou Azure Monitor.
Dans le code d’initialisation de votre application, avant de démarrer le client d’authentification MSAL (par exemple, PublicClientApplication ou ConfidentialClientApplication), déclarez une nouvelle MeterProvider instance à l’aide du code suivant.
using var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter("MicrosoftIdentityClient_Common_Meter")
.AddConsoleExporter()
.Build();
Cela initialise le fournisseur de compteurs et utilise le compteur intégré MSAL.NET (MicrosoftIdentityClient_Common_Meter) qui capture une série de compteurs et d’histogrammes. Lorsqu’un exportateur de console est utilisé, vous devez voir la sortie redirigée directement dans le terminal :
La section suivante présente les compteurs et histogrammes pris en charge pour le compteur par défaut.
Counters
msalsuccess_counter
Compteur permettant de comptabiliser le nombre cumulé de requêtes réussies dans MSAL.
Metadata
| Champ | Description |
|---|---|
MsalVersion |
Version de MSAL utilisée. |
Platform |
SKU .NET utilisé. |
ApiId |
ID de l’API utilisée pour l’acquisition de jetons. |
TokenSource |
Source du jeton (par exemple, fournisseur d’identité ou cache). |
CacheRefreshReason |
Raison de l’actualisation du cache. |
CacheLevel |
L1, L2 ou Inconnu lorsque le cache personnalisé est utilisé, mais que le niveau n’est pas enregistré. |
msalfailure_counter
Compteur permettant de comptabiliser l’agrégation des requêtes en échec dans MSAL.
Metadata
| Champ | Description |
|---|---|
MsalVersion |
Version de MSAL utilisée. |
Platform |
SKU .NET utilisé. |
ErrorCode |
code d’erreur Microsoft Entra ID en cas de MsalServiceException, MsalErrorCode en cas de MsalClientException ou le nom de l’exception s’il ne s’agit pas d’un MsalException. |
ApiId |
ID de l’API utilisée pour l’acquisition de jetons. |
CacheRefreshReason |
Raison de l’actualisation du cache. |
Histogrammes
MsalTotalDuration_1a_histogram
Histogramme pour capturer la latence totale en millisecondes pour l’acquisition de jetons via MSAL.
Metadata
| Champ | Description |
|---|---|
MsalVersion |
Version de MSAL utilisée. |
Platform |
.NET SKU utilisé. |
ApiId |
ID de l’API utilisée pour l’acquisition de jetons. |
CacheLevel |
L1, L2 ou Inconnu lorsque le cache personnalisé est utilisé, mais que le niveau n’est pas enregistré. |
TokenSource |
Source du jeton (par exemple, fournisseur d’identité ou cache). |
CacheRefreshReason |
Raison de l’actualisation du cache. |
MsalDurationInL1CacheInUs_1b_histogram
Histogramme pour capturer la latence lorsqu’un cache L1 est utilisé. Les valeurs sont en microsecondes pour l’acquisition de jetons via MSAL.
Metadata
| Champ | Description |
|---|---|
MsalVersion |
Version de MSAL utilisée. |
Platform |
SKU .NET utilisé. |
ApiId |
ID de l’API utilisée pour l’acquisition de jetons. |
CacheLevel |
L1, L2 ou Inconnu lorsque le cache personnalisé est utilisé, mais que le niveau n’est pas enregistré. |
TokenSource |
Source du jeton (par exemple, fournisseur d’identité ou cache). |
CacheRefreshReason |
Raison de l’actualisation du cache. |
MsalDurationInL2Cache_1a_histogram
Histogramme pour capturer la latence du cache L2 en millisecondes pour l’acquisition de jetons via MSAL.
Metadata
| Champ | Description |
|---|---|
MsalVersion |
Version de MSAL utilisée. |
Platform |
.NET référence utilisée. |
ApiId |
ID de l’API utilisée pour l’acquisition de jetons. |
CacheRefreshReason |
Raison de l’actualisation du cache. |
MsalDurationInHttp_1a_histogram
Histogramme pour capturer la latence HTTP en millisecondes pour l’acquisition de jetons via MSAL.
Metadata
| Champ | Description |
|---|---|
MsalVersion |
Version de MSAL utilisée. |
Platform |
.NET référence SKU utilisée. |
ApiId |
ID de l’API utilisée pour l’acquisition de jetons. |
Informations supplémentaires
Pour plus d’informations sur l’utilisation d’OpenTelemetry avec des applications .NET, reportez-vous à .NET observabilité avec OpenTelemetry.