ASP0026: [Authorize]
переопределяется [AllowAnonymous]
от "дальше"
Значение | |
---|---|
Идентификатор правила | ASP0026 |
Категория | Использование |
Исправление является критическим или не критическим | Не критическое |
Причина
Кажется интуитивно понятным, что [Authorize]
атрибут помещается "ближе" к действию MVC, чем [AllowAnonymous]
атрибут переопределяет [AllowAnonymous]
атрибут и принудительное авторизацию. Однако это не обязательно так. Что имеет значение, является относительным порядком атрибутов.
В следующем коде показаны примеры, в которых более близкий [Authorize]
атрибут переопределяется атрибутом [AllowAnonymous]
, который находится дальше.
[AllowAnonymous]
public class MyController
{
[Authorize] // Overridden by the [AllowAnonymous] attribute on the class
public IActionResult Private() => null;
}
[AllowAnonymous]
public class MyControllerAnon : ControllerBase
{
}
[Authorize] // Overridden by the [AllowAnonymous] attribute on MyControllerAnon
public class MyControllerInherited : MyControllerAnon
{
}
public class MyControllerInherited2 : MyControllerAnon
{
[Authorize] // Overridden by the [AllowAnonymous] attribute on MyControllerAnon
public IActionResult Private() => null;
}
[AllowAnonymous]
[Authorize] // Overridden by the preceding [AllowAnonymous]
public class MyControllerMultiple : ControllerBase
{
}
Описание правила
Предупреждение о [Authorize]
переопределении атрибута [AllowAnonymous]
атрибутом из "дальше".
Устранение нарушений
Правильное действие, выполняемого при отображении этого предупреждения, зависит от намерения атрибутов. Если этот атрибут непреднамеренно отображает конечную точку анонимным пользователям, следует удалить более [AllowAnonymous]
удаленный атрибут. [AllowAnonymous]
Если атрибут был предназначен для переопределения более близкого [Authorize]
атрибута, можно повторить [AllowAnonymous]
атрибут после [Authorize]
того, как атрибут прояснит намерение.
[AllowAnonymous]
public class MyController
{
// This produces no warning because the second, "closer" [AllowAnonymous]
// clarifies that [Authorize] is intentionally overridden.
// Specifying AuthenticationSchemes can still be useful
// for endpoints that allow but don't require authenticated users.
[Authorize(AuthenticationSchemes = "Cookies")]
[AllowAnonymous]
public IActionResult Privacy() => null;
}
Когда лучше отключить предупреждения
Уровень серьезности этой диагностики — Сведения. Вы можете отключить предупреждения, если вы намерены переопределить [Authorize]
атрибут. Однако рекомендуется очистить намерение, повторив [AllowAnonymous]
атрибут после атрибута [Authorize]
.
ASP.NET Core