CA5405: Nie zawsze pomijaj walidację tokenu w delegatach
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA5405 |
Tytuł | Nie zawsze pomijaj walidację tokenu w delegatach |
Kategoria | Bezpieczeństwo |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | 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 true
wartoś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
lubSecurityTokenInvalidLifetimeException
w przypadkach niepowodzenia, gdy chcesz zakończyć walidację niepowodzeniem i mają inne przypadki przekazywane przez zwrócenie wartościtrue
.
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;
};
}
}