CA5405: No omitir siempre la validación de tokens en delegados

Propiedad Value
Identificador de la regla CA5405
Título No omitir siempre la validación de tokens en delegados
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

La devolución de llamada asignada a AudienceValidator o LifetimeValidator siempre devuelve true.

Descripción de la regla

Al configurar los delegados de validación de TokenValidationParameter críticos para que siempre devuelvan true, se deshabilitan medidas de seguridad de autenticación importantes. Deshabilitar las medidas de seguridad puede provocar una validación incorrecta de los tokens de cualquier emisor o de los tokens expirados.

Para obtener más información sobre los procedimientos recomendados para la validación de tokens, consulte la wiki de la biblioteca.

Cómo corregir infracciones

  • Mejore la lógica del delegado para que no todas las rutas de acceso al código devuelvan true, lo que deshabilita eficazmente ese tipo de validación.
  • Genere SecurityTokenInvalidAudienceException o SecurityTokenInvalidLifetimeException en casos de error cuando desee no validar y hacer que se pasen otros casos devolviendo true.

Cuándo suprimir las advertencias

En algunos casos específicos en los que se utiliza el delegado para el registro adicional y es para los tipos de token en los que no se necesita el tipo específico de validación, puede tener sentido suprimir esta advertencia. Antes de deshabilitar esta validación, asegúrese de que ha pensado a fondo en las implicaciones de seguridad. Para obtener información sobre las contrapartidas, vea la wiki de la biblioteca de validación de tokens.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplos de pseudocódigo

Infracción

using System;
using Microsoft.IdentityModel.Tokens;

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

Solución

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