Partilhar via


CA5405: Nem sempre ignore a validação de token em delegados

Propriedade valor
ID da regra CA5405
Cargo 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 8 Não

Causa

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 ou SecurityTokenInvalidLifetimeException em casos de falha quando você quiser falhar na validação e fazer com que outros casos passem retornando true.

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