Jednoduchá autorizace v ASP.NET Core
Autorizace v ASP.NET Core se řídí pomocí různých AuthorizeAttribute parametrů a . Ve své nejzákladnější podobě použití atributu na kontroler, akci nebo stránku omezuje přístup k ověřeným [Authorize] Razor uživatelům této součásti.
Následující kód omezuje přístup k AccountController ověřeným uživatelům:
[Authorize]
public class AccountController : Controller
{
public ActionResult Login()
{
}
public ActionResult Logout()
{
}
}
Pokud chcete použít autorizaci pro akci místo kontroleru, použijte AuthorizeAttribute atribut na samotnou akci:
public class AccountController : Controller
{
public ActionResult Login()
{
}
[Authorize]
public ActionResult Logout()
{
}
}
Nyní mají k funkci přístup jenom ověření Logout uživatelé.
Atribut můžete použít také AllowAnonymous k povolení přístupu neověřovaných uživatelů k jednotlivým akcím. Například:
[Authorize]
public class AccountController : Controller
{
[AllowAnonymous]
public ActionResult Login()
{
}
public ActionResult Logout()
{
}
}
To by umožnilo jenom ověřeným uživatelům pro , s výjimkou akce, která je přístupná všem bez ohledu na jejich ověřený nebo neověřený AccountController Login /anonymní stav.
Upozornění
[AllowAnonymous] obchází všechny autorizační příkazy. Pokud zkombinujete [AllowAnonymous] [Authorize] a jakýkoli atribut, [Authorize] atributy se ignorují. Pokud například použijete na úrovni kontroleru, všechny atributy na stejném kontroleru (nebo u jakékoli akce v [AllowAnonymous] [Authorize] kontroleru) se ignorují.
Následující kód omezuje přístup ke stránce LogoutModel Razor na ověřené uživatele:
[Authorize]
public class LogoutModel : PageModel
{
public async Task OnGetAsync()
{
}
public async Task<IActionResult> OnPostAsync()
{
}
}
Informace o tom, jak globálně vyžadovat ověření všech uživatelů, najdete v tématu vyžadování ověřených uživatelů.
Autorizovat atribut a Razor stránky
AuthorizeAttributeNelze použít u obslužných Razor rutin stránky. Například nelze použít pro , nebo žádnou jinou obslužnou [Authorize] OnGet OnPost rutinu stránky. Zvažte použití kontroleru ASP.NET Core MVC pro stránky s různými požadavky na autorizaci pro různé obslužné rutiny. Použití kontroleru MVC v případě, že jsou vyžadovány různé požadavky na autorizaci:
- Je nejméně složitý přístup.
- Je přístup doporučený Microsoftem.
Pokud se rozhodnete nepoužít kontroler MVC, můžete k použití autorizace u metod obslužné rutiny stránky použít následující dva Razor přístupy:
- Pro obslužné rutiny stránky vyžadující jinou autorizaci použijte samostatné stránky. Přesuňte sdílený obsah do jednoho nebo více částečných zobrazení. Pokud je to možné, jedná se o doporučený přístup.
- Pro obsah, který musí sdílet společnou stránku, napište filtr, který provádí autorizaci jako součást IAsyncPageFilter.OnPageHandlerSelectionAsync. Projekt ověřování PageHandlerAuth GitHub tento přístup ukazuje:
AuthorizeIndexPageHandlerFilter implementuje autorizační filtr:[!code-csharp]
Atribut [AuthorizePageHandler] se použije na
OnGetobslužnou rutinu stránky: [!code-csharp]
Upozornění
Ukázkový přístup PageHandlerAuth ne:
- Vytvořte s atributy autorizace použitými na stránku, model stránky nebo globálně. Vytváření atributů autorizace vede k vícenásobnému spuštění ověřování a autorizace, pokud máte na stránce také použitou jednu instanci
AuthorizeAttributeAuthorizeFilternebo . - Pracujte ve spojení se zbytkem systému ASP.NET Core ověřování a autorizace. Je nutné ověřit, že tento přístup funguje správně pro vaši aplikaci.
Neexistují žádné plány na podporu obslužných AuthorizeAttribute rutin Razor na stránce.