Razor Konwencje autoryzacji stron w ASP.NET Core
Jednym ze sposobów kontrolowania dostępu w Razor aplikacji Pages jest użycie konwencji autoryzacji podczas uruchamiania. Te konwencje umożliwiają autoryzowanie użytkowników i zezwalanie użytkownikom anonimowym na dostęp do poszczególnych stron lub folderów stron. Konwencje opisane w tym temacie automatycznie stosują filtry autoryzacji w celu kontrolowania dostępu.
Wyświetl lub pobierz przykładowy kod (jak pobrać)
Przykładowa aplikacja używa uwierzytelniania bez ASP.NET Core Identity.cookie Koncepcje i przykłady przedstawione w tym temacie dotyczą aplikacji korzystających z ASP.NET Core Identity. Aby użyć ASP.NET Core Identity, postępuj zgodnie ze wskazówkami w temacie Wprowadzenie do Identity ASP.NET Core.
Wymaganie autoryzacji w celu uzyskania dostępu do strony
AuthorizePage Użyj konwencji, aby dodać element AuthorizeFilter do strony w określonej ścieżce:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Określona ścieżka to ścieżka aparatu wyświetlania, która jest ścieżką względną strony głównej Razor strony bez rozszerzenia i zawierającą tylko ukośniki do przodu.
Aby określić zasady autoryzacji, użyj przeciążenia autoryzowania strony:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
Uwaga
Element AuthorizeFilter można zastosować do klasy modelu strony za pomocą atrybutu filtru [Authorize]
. Aby uzyskać więcej informacji, zobacz Autoryzowanie atrybutu filtru.
Wymagaj autoryzacji w celu uzyskania dostępu do folderu stron
AuthorizeFolder Użyj konwencji, aby dodać element AuthorizeFilter do wszystkich stron w folderze w określonej ścieżce:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Określona ścieżka to ścieżka aparatu wyświetlania, która jest ścieżką względną strony głównej Razor .
Aby określić zasady autoryzacji, użyj przeciążenia AuthorizeFolder:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
Wymaganie autoryzacji w celu uzyskania dostępu do strony obszaru
AuthorizeAreaPage Użyj konwencji, aby dodać element AuthorizeFilter do strony obszaru w określonej ścieżce:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
Nazwa strony to ścieżka pliku bez rozszerzenia względem katalogu głównego stron dla określonego obszaru. Na przykład nazwa strony pliku Areas/Identity/Pages/Manage/Accounts.cshtml
to /Manage/Accounts.
Aby określić zasady autoryzacji, użyj przeciążenia AuthorizeAreaPage:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
Wymaganie autoryzacji w celu uzyskania dostępu do folderu obszarów
AuthorizeAreaFolder Użyj konwencji, aby dodać element AuthorizeFilter do wszystkich obszarów w folderze w określonej ścieżce:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
Ścieżka folderu jest ścieżką folderu względem katalogu głównego stron dla określonego obszaru. Na przykład ścieżka folderu dla plików w obszarze Obszary//IdentityStrony/Zarządzanie/ to /Zarządzaj.
Aby określić zasady autoryzacji, użyj przeciążenia AuthorizeAreaFolder:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
Zezwalaj na dostęp anonimowy do strony
AllowAnonymousToPage Użyj konwencji, aby dodać element AllowAnonymousFilter do strony w określonej ścieżce:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Określona ścieżka to ścieżka aparatu wyświetlania, która jest ścieżką względną strony głównej Razor strony bez rozszerzenia i zawierającą tylko ukośniki do przodu.
Zezwalaj na dostęp anonimowy do folderu stron
AllowAnonymousToFolder Użyj konwencji, aby dodać element AllowAnonymousFilter do wszystkich stron w folderze w określonej ścieżce:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Określona ścieżka to ścieżka aparatu wyświetlania, która jest ścieżką względną strony głównej Razor .
Uwaga dotycząca łączenia dostępu autoryzowanego i anonimowego
Ważne jest określenie, że folder stron wymaga autoryzacji, a następnie określ, że strona w tym folderze zezwala na dostęp anonimowy:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
Odwrotnie jednak nie jest prawidłowe. Nie można zadeklarować folderu stron na potrzeby dostępu anonimowego, a następnie określić stronę w tym folderze, która wymaga autoryzacji:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
Wymaganie autoryzacji na stronie prywatnej kończy się niepowodzeniem. Po zastosowaniu elementu i AuthorizeFilter do strony AllowAnonymousFilter pierwszeństwo AllowAnonymousFilter ma pierwszeństwo i kontroluje dostęp.
Dodatkowe zasoby
Jednym ze sposobów kontrolowania dostępu w Razor aplikacji Pages jest użycie konwencji autoryzacji podczas uruchamiania. Te konwencje umożliwiają autoryzowanie użytkowników i zezwalanie użytkownikom anonimowym na dostęp do poszczególnych stron lub folderów stron. Konwencje opisane w tym temacie automatycznie stosują filtry autoryzacji w celu kontrolowania dostępu.
Wyświetl lub pobierz przykładowy kod (jak pobrać)
Przykładowa aplikacja używa uwierzytelniania bez ASP.NET Core Identity.cookie Koncepcje i przykłady przedstawione w tym temacie dotyczą aplikacji korzystających z ASP.NET Core Identity. Aby użyć ASP.NET Core Identity, postępuj zgodnie ze wskazówkami w temacie Wprowadzenie do Identity ASP.NET Core.
Wymaganie autoryzacji w celu uzyskania dostępu do strony
AuthorizePage Użyj konwencji , AddRazorPagesOptions aby dodać element AuthorizeFilter do strony w określonej ścieżce:
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);
Określona ścieżka to ścieżka aparatu wyświetlania, która jest ścieżką względną strony głównej Razor strony bez rozszerzenia i zawierającą tylko ukośniki do przodu.
Aby określić zasady autoryzacji, użyj przeciążenia autoryzowania strony:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
Uwaga
Element AuthorizeFilter można zastosować do klasy modelu strony za pomocą atrybutu filtru [Authorize]
. Aby uzyskać więcej informacji, zobacz Autoryzowanie atrybutu filtru.
Wymagaj autoryzacji w celu uzyskania dostępu do folderu stron
AuthorizeFolder Użyj konwencji , AddRazorPagesOptions aby dodać element AuthorizeFilter do wszystkich stron w folderze w określonej ścieżce:
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);
Określona ścieżka to ścieżka aparatu wyświetlania, która jest ścieżką względną strony głównej Razor .
Aby określić zasady autoryzacji, użyj przeciążenia AuthorizeFolder:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
Wymaganie autoryzacji w celu uzyskania dostępu do strony obszaru
AuthorizeAreaPage Użyj konwencji , AddRazorPagesOptions aby dodać element AuthorizeFilter do strony obszaru w określonej ścieżce:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
Nazwa strony to ścieżka pliku bez rozszerzenia względem katalogu głównego stron dla określonego obszaru. Na przykład nazwa strony pliku Areas/Identity/Pages/Manage/Accounts.cshtml
to /Manage/Accounts.
Aby określić zasady autoryzacji, użyj przeciążenia AuthorizeAreaPage:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
Wymaganie autoryzacji w celu uzyskania dostępu do folderu obszarów
AuthorizeAreaFolder Użyj konwencji , AddRazorPagesOptions aby dodać element AuthorizeFilter do wszystkich obszarów w folderze w określonej ścieżce:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
Ścieżka folderu jest ścieżką folderu względem katalogu głównego stron dla określonego obszaru. Na przykład ścieżka folderu dla plików w obszarze Obszary//IdentityStrony/Zarządzanie/ to /Zarządzaj.
Aby określić zasady autoryzacji, użyj przeciążenia AuthorizeAreaFolder:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
Zezwalaj na dostęp anonimowy do strony
AllowAnonymousToPage Użyj konwencji , AddRazorPagesOptions aby dodać element AllowAnonymousFilter do strony w określonej ścieżce:
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);
Określona ścieżka to ścieżka aparatu wyświetlania, która jest ścieżką względną strony głównej Razor strony bez rozszerzenia i zawierającą tylko ukośniki do przodu.
Zezwalaj na dostęp anonimowy do folderu stron
AllowAnonymousToFolder Użyj konwencji , AddRazorPagesOptions aby dodać element AllowAnonymousFilter do wszystkich stron w folderze w określonej ścieżce:
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);
Określona ścieżka to ścieżka aparatu wyświetlania, która jest ścieżką względną strony głównej Razor .
Uwaga dotycząca łączenia dostępu autoryzowanego i anonimowego
Ważne jest, aby określić, że folder stron, które wymagają autoryzacji, i niż określić, że strona w tym folderze zezwala na dostęp anonimowy:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
Odwrotnie jednak nie jest prawidłowe. Nie można zadeklarować folderu stron na potrzeby dostępu anonimowego, a następnie określić stronę w tym folderze, która wymaga autoryzacji:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
Wymaganie autoryzacji na stronie prywatnej kończy się niepowodzeniem. Po zastosowaniu elementu i AuthorizeFilter do strony AllowAnonymousFilter pierwszeństwo AllowAnonymousFilter ma pierwszeństwo i kontroluje dostęp.
Dodatkowe zasoby
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla