ASP.NET Core basit yetkilendirme
ASP.NET Core yetkilendirme, AuthorizeAttribute ve çeşitli parametreleriyle denetlenir. En temel formda, [Authorize] özniteliği bir denetleyiciye, eyleme veya Razor sayfaya uygulayarak, bu bileşen kimliği doğrulanmış kullanıcılara erişimi kısıtlar.
Aşağıdaki kod, AccountController kimliği doğrulanmış kullanıcılara erişimi kısıtlar:
[Authorize]
public class AccountController : Controller
{
public ActionResult Login()
{
}
public ActionResult Logout()
{
}
}
Denetleyici yerine bir eyleme yetkilendirme uygulamak istiyorsanız, bu AuthorizeAttribute özniteliği eyleme uygulayın:
public class AccountController : Controller
{
public ActionResult Login()
{
}
[Authorize]
public ActionResult Logout()
{
}
}
Artık yalnızca kimliği doğrulanmış kullanıcılar işleve erişebilir Logout .
Ayrıca, AllowAnonymous kimliği doğrulanmamış kullanıcıların tek tek eylemlere erişimine izin vermek için özniteliğini de kullanabilirsiniz. Örnek:
[Authorize]
public class AccountController : Controller
{
[AllowAnonymous]
public ActionResult Login()
{
}
public ActionResult Logout()
{
}
}
Bu, AccountController Login kimliği doğrulanmış veya kimliği doğrulanmamış/anonim durumundan bağımsız olarak herkes tarafından erişilebilen, yalnızca kimliği doğrulanmış kullanıcıların öğesine izin verir.
Uyarı
[AllowAnonymous] Tüm yetkilendirme deyimlerini atlar. [AllowAnonymous]Ve herhangi bir özniteliği birleştirirseniz [Authorize] , [Authorize] öznitelikler yok sayılır. Örneğin, [AllowAnonymous] Denetleyici düzeyinde uygularsanız, [Authorize] aynı denetleyicideki (veya içindeki herhangi bir eylemde) tüm öznitelikler yok sayılır.
Aşağıdaki kod, LogoutModel Razor sayfaya erişimi kimliği doğrulanmış kullanıcılara kısıtlar:
[Authorize]
public class LogoutModel : PageModel
{
public async Task OnGetAsync()
{
}
public async Task<IActionResult> OnPostAsync()
{
}
}
Tüm kullanıcıların kimliklerinin nasıl doğrulandığını öğrenmek için bkz. kimliği doğrulanmış kullanıcılar gerektirme.
Özniteliği ve Razor sayfaları yetkilendir
AuthorizeAttribute Razor Sayfa işleyicilerine uygulanamıyor. Örneğin,, [Authorize] OnGet OnPost veya diğer sayfa işleyicisine uygulanamaz. farklı işleyiciler için farklı yetkilendirme gereksinimlerine sahip sayfalar için ASP.NET Core MVC denetleyicisi kullanmayı göz önünde bulundurun. Farklı yetkilendirme gereksinimleri gerektiğinde MVC denetleyicisi kullanma:
- En az karmaşık yaklaşımdır.
- , Microsoft tarafından önerilen yaklaşımdır.
MVC denetleyicisi kullanmamaya karar verirseniz, sayfa işleyici yöntemlerine yetkilendirme uygulamak için aşağıdaki iki yaklaşım kullanılabilir Razor :
- Farklı yetkilendirme gerektiren sayfa işleyicileri için ayrı sayfalar kullanın. Paylaşılan içeriği bir veya daha fazla kısmi görünümetaşıyın. Mümkün olduğunda önerilen yaklaşım budur.
- Ortak bir sayfa paylaşması gereken içerikler için, ıasyncpagefilter. OnPageHandlerSelectionAsyncöğesinin bir parçası olarak yetkilendirme gerçekleştiren bir filtre yazın. pagehandlerauth GitHub projesi bu yaklaşımı gösterir:
Authorizeındexpagehandlerfilter yetkilendirme filtresini uygular:[!code-csharp]
[Authorizepagehandler] özniteliği
OnGetsayfa işleyicisine uygulandı:[!code-csharp]
Uyarı
Pagehandlerauth örnek yaklaşımı Şu değildir:
- Sayfa, sayfa modeli veya küresel olarak, yetkilendirme öznitelikleri ile oluşturun. Bir sayfada daha fazla veya örnek varsa, yetkilendirme özniteliklerinin oluşturulması, kimlik doğrulama ve yetkilendirme ile birden çok kez yürütülen sonuçlara neden olur
AuthorizeAttributeAuthorizeFilter. - ASP.NET Core kimlik doğrulaması ve yetkilendirme sisteminin geri kalanı ile birlikte çalışın. Uygulamanız için bu yaklaşımı kullanarak doğru şekilde çalıştığını doğrulamanız gerekir.
AuthorizeAttributeOn sayfa işleyicilerini desteklemeye yönelik bir plan yoktur Razor .