Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
ASP0026:
| Värde | |
|---|---|
| Regel-ID | ASP0026 |
| Kategori | Användning |
| Korrigeringen är antingen brytande eller icke-brytande | Oskiljbar |
Orsak
Det verkar intuitivt att ett [Authorize] attribut som placeras "närmare" en MVC-åtgärd än ett [AllowAnonymous] attribut skulle åsidosätta [AllowAnonymous]-attributet och tvinga auktorisering. Detta är dock inte nödvändigtvis fallet. Vad som spelar roll är attributens relativa ordning.
Anmärkning
Attributet [AllowAnonymous] inaktiverar inte autentisering helt. När autentiseringsuppgifter skickas till en slutpunkt med [AllowAnonymous]autentiserar slutpunkten fortfarande dessa autentiseringsuppgifter och upprättar användarens identitet. Attributet [AllowAnonymous] innebär bara att autentisering inte krävs – slutpunkten körs endast som anonym när inga autentiseringsuppgifter anges. Det här beteendet kan vara användbart för slutpunkter som måste fungera för både autentiserade och anonyma användare.
Följande kod visar exempel där ett närmare [Authorize] attribut åsidosätts av ett [AllowAnonymous] attribut som ligger längre bort.
[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
{
}
Regelbeskrivning
Den här varningen anger att ett [Authorize] attribut åsidosätts av ett [AllowAnonymous] attribut från "längre bort". När [AllowAnonymous] har företräde kräver slutpunkten inte autentisering men accepterar och bearbetar fortfarande autentiseringsuppgifter om de tillhandahålls. Detta innebär att:
- Om en begäran innehåller autentiseringsuppgifter autentiserar slutpunkten användaren och gör deras identitet tillgänglig.
- Om en begäran inte innehåller autentiseringsuppgifter tillåter slutpunkten anonym åtkomst.
Det här beteendet kan oavsiktligt exponera slutpunkter som var avsedda att kräva autentisering.
Så här åtgärdar du överträdelser
Rätt åtgärd om du ser den här varningen beror på avsikten bakom attributen. Längre bort [AllowAnonymous]-attributet bör tas bort om det oavsiktligt exponerar slutpunkten för anonyma användare. Om attributet [AllowAnonymous] var avsett att åsidosätta ett närmare [Authorize] attribut kan du upprepa attributet [AllowAnonymous] efter attributet [Authorize] för att förtydliga avsikten.
[AllowAnonymous]
public class MyController
{
// This produces no warning because the second, "closer" [AllowAnonymous]
// clarifies that [Authorize] is intentionally overridden.
// Specifying AuthenticationSchemes can be useful for endpoints that
// allow but don't require authenticated users. When credentials are sent,
// they will be authenticated; when no credentials are sent, the endpoint
// allows anonymous access.
[Authorize(AuthenticationSchemes = "Cookies")]
[AllowAnonymous]
public IActionResult Privacy() => null;
}
När du ska ignorera varningar
Allvarlighetsgraden för den här diagnostiken är Information. Du kan ignorera varningar om din avsikt är att åsidosätta attributet [Authorize]. Vi rekommenderar dock att du gör avsikten tydlig genom att upprepa attributet [AllowAnonymous] efter attributet [Authorize].
ASP.NET Core