Compartilhar via


CA5405: não sempre omitir a validação de token em delegados

Propriedade 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 Inquebrável
Habilitado por padrão no .NET 10 Não
Idiomas aplicáveis C# e Visual Basic

Causa

O callback atribuído a AudienceValidator ou LifetimeValidator sempre retorna true.

Descrição da regra

Ao 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 delegado 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 passarem retornando true.

Quando suprimir avisos

Em alguns casos específicos em que você está utilizando o delegado para registro adicional em log e é para tipos de token nos quais o tipo específico de validação não é necessário, pode fazer sentido suprimir este 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;
        };
    }
}