ASP0026: [Authorize]
je přepsán z [AllowAnonymous]
"daleko"
Hodnota | |
---|---|
ID pravidla | ASP0026 |
Kategorie | Využití |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Příčina
Zdá se intuitivní, že [Authorize]
atribut umístěný "blíž" k akci MVC než [AllowAnonymous]
atribut by přepsal [AllowAnonymous]
atribut a vynutit autorizaci. To ale nemusí být nutně případ. Záleží na relativním pořadí atributů.
Následující kód ukazuje příklady, kde se blíže [Authorize]
atribut přepíše atributem [AllowAnonymous]
, který je vzdálenější.
[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
{
}
Popis pravidla
Upozornění, že [Authorize]
atribut je přepsán atributem [AllowAnonymous]
od "daleko".
Jak opravit porušení
Správná akce, která se má provést, pokud se zobrazí toto upozornění, závisí na záměru atributů. Pokud se koncový bod nechtěně vystavuje anonymním uživatelům, měl by být atribut odsud [AllowAnonymous]
odebrán. [AllowAnonymous]
Pokud byl atribut určen k přepsání bližšího [Authorize]
atributu, můžete atribut opakovat [AllowAnonymous]
za [Authorize]
atributem a objasnit záměr.
[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;
}
Kdy potlačit upozornění
Úroveň závažnosti této diagnostiky je Informace. Upozornění můžete potlačit, pokud je vaším záměrem [Authorize]
přepsat atribut. Doporučujeme však záměr vymazat opakováním atributu [AllowAnonymous]
za atributem [Authorize]
.