CA5405: Nie zawsze pomijaj walidację tokenu w delegatach

Właściwości Wartość
Identyfikator reguły CA5405
Stanowisko Nie zawsze pomijaj walidację tokenu w delegatach
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Wywołanie zwrotne przypisane do metody AudienceValidator lub LifetimeValidator zawsze zwraca wartość true.

Opis reguły

Ustawiając delegatów weryfikacji krytycznej TokenValidationParameter w celu zawsze zwracania truewartości , ważne zabezpieczenia uwierzytelniania są wyłączone. Wyłączenie zabezpieczeń może prowadzić do nieprawidłowej weryfikacji tokenów z dowolnego wystawcy lub wygasłych tokenów.

Aby uzyskać więcej informacji na temat najlepszych rozwiązań dotyczących walidacji tokenów, zobacz witrynę typu wiki biblioteki.

Jak naprawić naruszenia

  • Popraw logikę delegata, aby nie wszystkie ścieżki kodu zwracały wartość true, co skutecznie wyłącza ten typ weryfikacji.
  • Zgłaszaj SecurityTokenInvalidAudienceException lub SecurityTokenInvalidLifetimeException w przypadkach niepowodzenia, gdy chcesz zakończyć walidację niepowodzeniem i mają inne przypadki przekazywane przez zwrócenie wartości true.

Kiedy pomijać ostrzeżenia

W niektórych konkretnych przypadkach, w których używasz delegata do dodatkowego rejestrowania i jest przeznaczony dla typów tokenów, w których określony typ weryfikacji nie jest potrzebny, warto pominąć to ostrzeżenie. Przed wyłączeniem tej weryfikacji upewnij się, że zostały one w pełni przemyślane przez implikacje dotyczące zabezpieczeń. Aby uzyskać informacje o kompromisach, zobacz witrynę typu wiki biblioteki weryfikacji tokenów.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady przykładów kodu przykładowego

Naruszenie

using System;
using Microsoft.IdentityModel.Tokens;

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

Rozwiązanie

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