CA5405: не пропускать проверку токена в делегатах во всех случаях
Свойство | Значение |
---|---|
Идентификатор правила | CA5405 |
Заголовок | Не всегда пропускать проверку маркеров в делегатах |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Обратный вызов, назначенный AudienceValidator или LifetimeValidator всегда возвращается true
.
Описание правила
Если критические делегаты проверки TokenValidationParameter
настроены таким образом, чтобы всегда возвращать true
, будут отключены важные инструменты проверки подлинности. Отключение защиты может привести к неправильной проверке токенов от любого издателя или токенов с истекшим сроком действия.
Дополнительные сведения о рекомендациях по проверке токенов см. на вики-странице библиотеки.
Устранение нарушений
- Усовершенствуйте логику делегата таким образом, чтобы не все пути кода возвращали
true
. Это фактически отключает данный тип проверки. - В случае сбоя следует вызывать
SecurityTokenInvalidAudienceException
илиSecurityTokenInvalidLifetimeException
, если требуется отключить проверку и подтвердить соответствие остальных случаев путем возвратаtrue
.
Когда лучше отключить предупреждения
В отдельных случаях, когда вы используете делегат для дополнительного ведения журнала и этот делегат предназначен для типов токенов, для которых не требуется конкретный тип проверки, может быть целесообразно отключить это предупреждение. Перед отключением этой проверки убедитесь, что вы полностью оценили последствия с точки зрения безопасности. Дополнительные сведения о преимуществах и недостатках см. на вики-странице библиотеки проверки токенов.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA5405
// The code that's violating the rule is on this line.
#pragma warning restore CA5405
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA5405.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.
Примеры псевдокода
Нарушение
using System;
using Microsoft.IdentityModel.Tokens;
class TestClass
{
public void TestMethod()
{
TokenValidationParameters parameters = new TokenValidationParameters();
parameters.AudienceValidator = (audiences, token, tvp) => { return true; };
}
}
Решение
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;
};
}
}