Share via


CA5405: Tokenvalidierung in Delegaten nicht immer überspringen

Eigenschaft Wert
Regel-ID CA5405
Titel Tokenvalidierung in Delegaten nicht immer überspringen
Kategorie Security
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Der AudienceValidator oder LifetimeValidator zugewiesene Rückruf gibt immer true zurück.

Regelbeschreibung

Indem kritische TokenValidationParameter-Validierungsdelegate so eingestellt werden, dass sie immer true zurückgeben, werden wichtige Authentifizierungssicherungen deaktiviert. Das Deaktivieren von Sicherheitsvorkehrungen kann zu einer falschen Validierung der Token von Ausstellern oder abgelaufenen Token führen.

Weitere Informationen über bewährte Praktiken für die Token-Validierung finden Sie im Wiki der Bibliothek.

Behandeln von Verstößen

  • Verbessern Sie die Logik des Delegaten so, dass nicht alle Codepfade true zurückgeben werden, sodass diese Art der Validierung effektiv deaktiviert wird.
  • Verwerfen Sie SecurityTokenInvalidAudienceException oder SecurityTokenInvalidLifetimeException, wenn Sie die Validierung fehlschlagen soll und Sie andere Fälle durch Rückgabe von true behalten möchten.

Wann sollten Warnungen unterdrückt werden?

Wenn Sie in bestimmten Fällen den Delegaten für die zusätzliche Protokollierung und für Tokentypen verwenden, bei denen der spezifische Validierungstyp nicht erforderlich ist, kann es sinnvoll sein, diese Warnung zu unterdrücken. Stellen Sie vor der Deaktivierung dieser Überprüfung sicher, dass Sie die Auswirkungen auf die Sicherheit vollständig durchdacht haben. Informationen zu den Kompromissen finden Sie im Wiki der Token-Validierungsbibliothek.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Pseudocodebeispiele

Verletzung

using System;
using Microsoft.IdentityModel.Tokens;

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

Lösung

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