RazorASP.NET Core için sayfa yetkilendirme kuralları
Sayfalar uygulamanızda erişimi denetlemeye yönelik bir yol Razor , başlangıçta yetkilendirme kurallarını kullanmaktır. Bu kurallar, kullanıcıları yetkilendirmeniz ve anonim kullanıcıların ayrı sayfalara veya sayfa klasörlerine erişmesine izin verir. Bu konu başlığı altında açıklanan kurallar, erişimi denetlemek için otomatik olarak Yetkilendirme filtreleri uygular.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Örnek uygulama, cookie kimlik doğrulaması olmadan ASP.NET Core Identity kullanır. Bu konuda gösterilen kavramlar ve örnekler, kullanan uygulamalar için eşit oranda geçerlidir ASP.NET Core Identity . Kullanmak için ASP.NET Core Identity içindeki yönergeleri izleyin IdentityASP.NET Core'a giriş .
Bir sayfaya erişmek için yetkilendirme gerektir
AuthorizePageBelirtilen yoldaki sayfaya bir eklemek için kuralı kullanın AuthorizeFilter :
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Belirtilen yol, Razor uzantısı olmayan ve yalnızca eğik çizgi içeren sayfa kök göreli yolu olan görünüm altyapısı yoludur.
Bir Yetkilendirme İlkesibelirtmek Için bir authorizepage aşırı yüklemesikullanın:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
Not
AuthorizeFilterFiltre özniteliğiyle bir sayfa modeli sınıfına uygulanabilir [Authorize] . Daha fazla bilgi için bkz. Yetkilendirme filtre özniteliği.
Bir sayfa klasörüne erişmek için yetkilendirme gerektir
AuthorizeFolder AuthorizeFilter Belirtilen yoldaki bir klasördeki tüm sayfalara bir eklemek için kuralını kullanın:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Belirtilen yol, Razor sayfa kök göreli yolu olan görünüm altyapısı yoludur.
Bir Yetkilendirme İlkesibelirtmek için, bir authorizefolder aşırı yüklemesikullanın:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
Alan sayfasına erişmek için yetkilendirme gerektir
AuthorizeAreaPage AuthorizeFilter Belirtilen yoldaki alan sayfasına eklemek için kuralını kullanın:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
Sayfa adı, belirtilen alanın sayfalar kök dizinine göre uzantısı olmayan dosyanın yoludur. Örneğin, dosya alanı/ Identity /Pages/Manage/accounts.exe için sayfa adı /Manage/accounts olur.
Bir Yetkilendirme İlkesibelirtmek için, bir Authorizeareapage aşırı yüklemesikullanın:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
Bir alan klasörüne erişmek için yetkilendirme gerektir
AuthorizeAreaFolder AuthorizeFilter Belirtilen yoldaki bir klasördeki tüm alanlara bir eklemek için kuralını kullanın:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
Klasör yolu, belirtilen alanın sayfalar kök dizinine göre klasörün yoludur. Örneğin, Areas/ Identity /Pages/Manage/ altındaki dosyalar için klasör yolu/ Yönet' dir.
Bir Yetkilendirme İlkesibelirtmek için, bir Authorizeareafolder aşırı yüklemesikullanın:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
Bir sayfaya anonim erişime izin ver
AllowAnonymousToPageBelirtilen yoldaki bir sayfaya bir eklemek için kuralı kullanın AllowAnonymousFilter :
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Belirtilen yol, Razor uzantısı olmayan ve yalnızca eğik çizgi içeren sayfa kök göreli yolu olan görünüm altyapısı yoludur.
Bir sayfa klasörüne anonim erişime izin ver
AllowAnonymousToFolder AllowAnonymousFilter Belirtilen yoldaki bir klasördeki tüm sayfalara bir eklemek için kuralını kullanın:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Belirtilen yol, Razor sayfa kök göreli yolu olan görünüm altyapısı yoludur.
Yetkili ve anonim erişimi birleştirme hakkında
Bir sayfa klasörünün yetkilendirme gerektirdiğini ve sonra bu klasörün içindeki bir sayfanın adsız erişime izin verdiğini belirtmek için geçerlidir:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
Ancak, tersi de geçerlidir. Anonim erişim için bir sayfa klasörü bildiremezsiniz ve ardından bu klasör içinde yetkilendirme gerektiren bir sayfa belirtemezsiniz:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
Özel sayfada yetkilendirme gerektirme başarısız olur. Ve sayfaya her ikisi de AllowAnonymousFilter AuthorizeFilter uygulandığında,, AllowAnonymousFilter öncelik alır ve erişimi denetler.
Ek kaynaklar
Sayfalar uygulamanızda erişimi denetlemeye yönelik bir yol Razor , başlangıçta yetkilendirme kurallarını kullanmaktır. Bu kurallar, kullanıcıları yetkilendirmeniz ve anonim kullanıcıların ayrı sayfalara veya sayfa klasörlerine erişmesine izin verir. Bu konu başlığı altında açıklanan kurallar, erişimi denetlemek için otomatik olarak Yetkilendirme filtreleri uygular.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Örnek uygulama, cookie kimlik doğrulaması olmadan ASP.NET Core Identity kullanır. Bu konuda gösterilen kavramlar ve örnekler, kullanan uygulamalar için eşit oranda geçerlidir ASP.NET Core Identity . Kullanmak için ASP.NET Core Identity içindeki yönergeleri izleyin IdentityASP.NET Core'a giriş .
Bir sayfaya erişmek için yetkilendirme gerektir
AuthorizePage AddRazorPagesOptions Belirtilen yoldaki sayfaya bir eklemek için aracılığıyla kuralını kullanın AuthorizeFilter :
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Belirtilen yol, Razor uzantısı olmayan ve yalnızca eğik çizgi içeren sayfa kök göreli yolu olan görünüm altyapısı yoludur.
Bir Yetkilendirme İlkesibelirtmek Için bir authorizepage aşırı yüklemesikullanın:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
Not
AuthorizeFilterFiltre özniteliğiyle bir sayfa modeli sınıfına uygulanabilir [Authorize] . Daha fazla bilgi için bkz. Yetkilendirme filtre özniteliği.
Bir sayfa klasörüne erişmek için yetkilendirme gerektir
AuthorizeFolder AddRazorPagesOptions AuthorizeFilter Belirtilen yoldaki bir klasördeki tüm sayfalara eklemek için aracılığıyla kuralını kullanın:
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Belirtilen yol, Razor sayfa kök göreli yolu olan görünüm altyapısı yoludur.
Bir Yetkilendirme İlkesibelirtmek için, bir authorizefolder aşırı yüklemesikullanın:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
Alan sayfasına erişmek için yetkilendirme gerektir
AuthorizeAreaPage AddRazorPagesOptions Belirtilen yoldaki alan sayfasına eklemek için aracılığıyla kuralını kullanın AuthorizeFilter :
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
Sayfa adı, belirtilen alanın sayfalar kök dizinine göre uzantısı olmayan dosyanın yoludur. Örneğin, dosya alanı/ Identity /Pages/Manage/accounts.exe için sayfa adı /Manage/accounts olur.
Bir Yetkilendirme İlkesibelirtmek için, bir Authorizeareapage aşırı yüklemesikullanın:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
Bir alan klasörüne erişmek için yetkilendirme gerektir
AuthorizeAreaFolder AddRazorPagesOptions AuthorizeFilter Belirtilen yoldaki bir klasördeki tüm alanlara bir eklemek için aracılığıyla kuralını kullanın:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
Klasör yolu, belirtilen alanın sayfalar kök dizinine göre klasörün yoludur. Örneğin, Areas/ Identity /Pages/Manage/ altındaki dosyalar için klasör yolu/ Yönet' dir.
Bir Yetkilendirme İlkesibelirtmek için, bir Authorizeareafolder aşırı yüklemesikullanın:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
Bir sayfaya anonim erişime izin ver
AllowAnonymousToPage AddRazorPagesOptions Belirtilen yoldaki bir sayfaya bir eklemek için aracılığıyla kuralını kullanın AllowAnonymousFilter :
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Belirtilen yol, Razor uzantısı olmayan ve yalnızca eğik çizgi içeren sayfa kök göreli yolu olan görünüm altyapısı yoludur.
Bir sayfa klasörüne anonim erişime izin ver
AllowAnonymousToFolder AddRazorPagesOptions AllowAnonymousFilter Belirtilen yoldaki bir klasördeki tüm sayfalara eklemek için aracılığıyla kuralını kullanın:
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Belirtilen yol, Razor sayfa kök göreli yolu olan görünüm altyapısı yoludur.
Yetkili ve anonim erişimi birleştirme hakkında
Yetkilendirme gerektiren bir sayfa klasörünün ve bu klasörün içindeki bir sayfanın adsız erişime izin verdiğini belirtmek için geçerlidir:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
Ancak, tersi de geçerlidir. Anonim erişim için bir sayfa klasörü bildiremezsiniz ve ardından bu klasör içinde yetkilendirme gerektiren bir sayfa belirtemezsiniz:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
Özel sayfada yetkilendirme gerektirme başarısız olur. Ve sayfaya her ikisi de AllowAnonymousFilter AuthorizeFilter uygulandığında,, AllowAnonymousFilter öncelik alır ve erişimi denetler.