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
ouSecurityTokenInvalidLifetimeException
em casos de falha quando você deseja falhar na validação e ter outros casos passados retornandotrue
.
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;
};
}
}