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