ASP0026: [Authorize]
wird von [AllowAnonymous]
„weiter entfernt“ außer Kraft gesetzt.
Wert | |
---|---|
Regel-ID | ASP0026 |
Kategorie | Verwendung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Ursache
Es erscheint intuitiv, dass ein [Authorize]
-Attribut, das "näher" an einer MVC-Aktion platziert ist als ein [AllowAnonymous]
-Attribut, das [AllowAnonymous]
-Attribut außer Kraft setzt und eine Autorisierung erzwingt. Dies ist jedoch nicht unbedingt der Fall. Was zählt, ist die relative Reihenfolge der Attribute.
Der folgende Code zeigt Beispiele, in denen ein näher gelegenes [Authorize]
-Attribut durch ein weiter entferntes [AllowAnonymous]
-Attribut außer Kraft gesetzt wird.
[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
{
}
Regelbeschreibung
Warnung, dass ein [Authorize]
-Attribut von einem [AllowAnonymous]
-Attribut von „weiter entfernt“ überschrieben wird.
Behandeln von Verstößen
Was Sie tun müssen, wenn Sie diese Warnung sehen, hängt von der Absicht ab, die hinter den Attributen steht. Das weiter entfernte [AllowAnonymous]
-Attribut sollte entfernt werden, wenn es den Endpunkt ungewollt anonymen Benutzerinnen und Benutzern zugänglich macht. Wenn das [AllowAnonymous]
-Attribut ein näheres [Authorize]
-Attribut außer Kraft setzen soll, können Sie das [AllowAnonymous]
-Attribut nach dem [Authorize]
-Attribut wiederholen, um die Absicht zu verdeutlichen.
[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;
}
Wann sollten Warnungen unterdrückt werden?
Der Schweregrad dieser Diagnose ist „Information“. Sie können Warnungen unterdrücken, wenn Sie beabsichtigen, das Attribut [Authorize]
außer Kraft zu setzen. Es wird jedoch empfohlen, die Absicht deutlich zu machen, indem Sie das [AllowAnonymous]
-Attribut nach dem [Authorize]
-Attribut wiederholen.