CA5405: Nem sempre ignore a validação de token em delegados
Property | valor |
---|---|
ID da regra | CA5405 |
Título | Nem sempre ignore a validação de token em delegados |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Não |
Motivo
O retorno de chamada atribuído ou AudienceValidator LifetimeValidator sempre retorna.true
Descrição da regra
Ao definir delegados de validação críticos TokenValidationParameter
para sempre retornar true
, proteções de autenticação importantes são desabilitadas. A desativação de salvaguardas pode levar à validação incorreta de tokens de qualquer emissor ou tokens expirados.
Para obter mais informações sobre as práticas recomendadas para validação de tokens, 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 desativa esse tipo de validação. - Lance
SecurityTokenInvalidAudienceException
ouSecurityTokenInvalidLifetimeException
em casos de falha quando você quiser falhar na validação e fazer com que outros casos passem retornandotrue
.
Quando suprimir avisos
Em alguns casos específicos em que você está utilizando o delegado 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 desativar essa validação, certifique-se de ter pensado completamente nas implicações de segurança. Para obter informações sobre as compensações, consulte o wiki da biblioteca de validação de token.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5405.severity = none
Para obter mais informações, consulte 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;
};
}
}