CA5405: nem sempre omitir a validação de token em representantes

Property Valor
ID da regra CA5405
Título Nem sempre ignore a validação do token em delegados
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

O retorno de chamada atribuído a AudienceValidator ou LifetimeValidator sempre retorna true.

Descrição da regra

Ao se definir representantes de validação TokenValidationParameter críticos para sempre retornar true, proteções de autenticação importantes são desabilitadas. Desabilitar proteções pode levar à validação incorreta de tokens de qualquer emissor ou tokens expirados.

Para obter mais informações sobre as melhores práticas para validação de token, consulte o wiki da biblioteca.

Como corrigir violações

  • Melhore a lógica do representante para que nem todos os caminhos de código retornem true, o que efetivamente desabilita esse tipo de validação.
  • Gerar SecurityTokenInvalidAudienceException ou SecurityTokenInvalidLifetimeException em casos de falha quando você deseja falhar na validação e ter outros casos passados retornando true.

Quando suprimir avisos

Em alguns casos específicos em que você está utilizando o representante para registro em log adicional e é para tipos de token em que o tipo específico de validação não é necessário, pode fazer sentido suprimir esse aviso. Antes de desabilitar essa validação, lembre-se de ter pensado totalmente nas implicações de segurança. Para obter informações sobre as compensações, confira o wiki da biblioteca de validação de token.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

Para obter mais informações, confira Como suprimir avisos de análise de código.

Exemplos de pseudocódigo

Violação

using System;
using Microsoft.IdentityModel.Tokens;

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

Solução

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