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, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Ne
Příslušné jazyky C# a Visual Basic

Příčina

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

Popis pravidla

Nastavením kritických TokenValidationParameter delegátů pro validaci, 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, aby nevedla všechna větvení kódu k návratu true, což by fakticky deaktivovalo tento typ ověřování.
  • Vyvolejte SecurityTokenInvalidAudienceException nebo SecurityTokenInvalidLifetimeException v případech selhání, pokud chcete, aby ověření selhalo, a jiné případy prošly 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 wiki 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;
        };
    }
}