CA5405 : n’ignorez pas toujours la validation des jetons dans les délégués

Propriété Value
Identificateur de la règle CA5405
Titre Ne pas toujours ignorer la validation des jetons dans les délégués
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Le rappel affecté à AudienceValidator ou LifetimeValidator retourne toujours true.

Description de la règle

En définissant les délégués de validation critiques TokenValidationParameter pour qu’ils retournent toujours true, les protections d’authentification importantes sont désactivées. La désactivation des protections peut entraîner une validation incorrecte des jetons de n’importe quel émetteur ou des jetons arrivés à expiration.

Pour plus d’informations sur les bonnes pratiques en matière de validation de jeton, consultez le wiki de la bibliothèque.

Comment corriger les violations

  • Améliorez la logique du délégué afin que tous les chemins de code ne retournent pas true, ce qui désactive ce type de validation.
  • Levez SecurityTokenInvalidAudienceException ou SecurityTokenInvalidLifetimeException dans les cas d’échec où vous souhaitez faire échouer la validation et que d’autres cas réussissent en retournant true.

Quand supprimer les avertissements

Dans certains cas spécifiques où vous utilisez le délégué pour une journalisation supplémentaire et pour les types de jetons où le type de validation spécifique n’est pas nécessaire, il peut être judicieux de supprimer cet avertissement. Avant de désactiver cette validation, veillez à bien réfléchir aux implications en matière de sécurité. Pour plus d’informations sur les compromis, consultez le wiki de la bibliothèque de validation de jetons.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable CA5405
// The code that's violating the rule is on this line.
#pragma warning restore CA5405

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.CA5405.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemples de pseudo-code

Violation

using System;
using Microsoft.IdentityModel.Tokens;

class TestClass
{
    public void TestMethod()
    {
        TokenValidationParameters parameters = new TokenValidationParameters();
        parameters.AudienceValidator = (audiences, token, tvp) => { return true; };
    }
}

Solution

using System;
using Microsoft.IdentityModel.Tokens;

class TestClass
{
    public void TestMethod()
    {
        TokenValidationParameters parameters = new TokenValidationParameters();
        parameters.AudienceValidator = (audiences, token, tvp) =>
        {
            // Implement your own custom audience validation
            if (PerformCustomAudienceValidation(audiences, token))
                return true;
            else
                return false;
        };
    }
}