CA5405: Hoppa inte alltid över tokenverifiering i ombud

Egenskap Värde
Regel-ID CA5405
Title Hoppa inte alltid över tokenverifiering i ombud
Kategori Säkerhet
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Nej
Tillämpliga språk C# och Visual Basic

Orsak

Återanropet som tilldelats till AudienceValidator eller LifetimeValidator returnerar truealltid .

Regelbeskrivning

Genom att ange att kritiska TokenValidationParameter verifieringsdelegater alltid ska returnera trueinaktiveras viktiga autentiseringsskydd. Om du inaktiverar skyddsåtgärder kan det leda till felaktig validering av token från alla utfärdare eller förfallna token.

Mer information om metodtips för tokenverifiering finns i bibliotekets wiki.

Så här åtgärdar du överträdelser

  • Förbättra logiken för delegeringen så att inte alla möjliga kodvägar returnerar true, vilket effektivt inaktiverar den typen av validering.
  • Kasta SecurityTokenInvalidAudienceException eller SecurityTokenInvalidLifetimeException i felfall när du vill bryta valideringen så att andra fall kan passera genom att returnera true.

När du ska ignorera varningar

I vissa specifika fall där du använder ombudet för ytterligare loggning och det är för tokentyper där den specifika typen av validering inte behövs, kan det vara klokt att ignorera den här varningen. Innan du inaktiverar den här valideringen bör du vara säker på att du har tänkt igenom säkerhetskonsekvenserna fullt ut. Information om kompromisserna finns i wikin för tokenvalideringsbiblioteket.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Exempel på pseudokod

Kränkning

using System;
using Microsoft.IdentityModel.Tokens;

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

Lösning

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