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 9 | 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
oSecurityTokenInvalidLifetimeException
en casos de error cuando desee no validar y hacer que se pasen otros casos devolviendotrue
.
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;
};
}
}