CA5405: Nepřeskakujte vždy ověření tokenu v delegátech

Vlastnost Hodnota
ID pravidla CA5405
Název Nepřeskakujte vždy ověření tokenu u delegátů.
Kategorie Zabezpečení
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 No

Příčina

Zpětné volání přiřazené AudienceValidator nebo LifetimeValidator vždy vrátí true.

Popis pravidla

Nastavením důležitých TokenValidationParameter delegátů ověřování tak, aby se vždy vracely true, jsou zakázána důležitá bezpečnostní opatření ověřování. Zakázání ochranných opatření může vést k nesprávnému ověření tokenů od jakéhokoli vystavitele nebo tokenů s vypršenou platností.

Další informace o osvědčených postupech pro ověřování tokenů najdete na wikiwebu knihovny.

Jak opravit porušení

  • Vylepšete logiku delegáta, takže ne všechny cesty kódu se vrátí true, což účinně zakáže tento typ ověřování.
  • Vyvolání SecurityTokenInvalidAudienceException nebo SecurityTokenInvalidLifetimeException v případech selhání, pokud chcete neúspěšné ověření a mají jiné případy průchod vrácením true.

Kdy potlačit upozornění

V některých konkrétních případech, kdy používáte delegáta pro další protokolování a jedná se o typy tokenů, u kterých není potřeba konkrétní typ ověření, může být vhodné toto upozornění potlačit. Než toto ověření zakážete, ujistěte se, že jste plně promysleli důsledky zabezpečení. Informace o kompromisech najdete na wikiwebu knihovny ověřování tokenů.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklady pseudokódu

Porušení

using System;
using Microsoft.IdentityModel.Tokens;

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

Řešení

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