Share via


CA5405: Hoppa inte alltid över tokenverifiering i ombud

Property Värde
Regel-ID CA5405
Rubrik Hoppa inte alltid över tokenverifiering i ombud
Kategori Säkerhet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

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 ombudet så att inte alla kodsökvägar returnerar true, vilket effektivt inaktiverar den typen av validering.
  • Kasta SecurityTokenInvalidAudienceException eller SecurityTokenInvalidLifetimeException i felfall när du vill misslyckas med valideringen och låta andra fall passera genom att truereturnera .

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