Razor Соглашения об авторизации pages в ASP.NET Core

Одним из способов управления доступом в Razor приложении Pages является использование соглашений о авторизации при запуске. Эти соглашения позволяют авторизовать пользователей и разрешить анонимным пользователям доступ к отдельным страницам или папкам страниц. Соглашения, описанные в этом разделе, автоматически применяют фильтры авторизации для управления доступом.

Просмотреть или скачать образец кода (описание загрузки)

В примере приложения используется cookie проверка подлинности без ASP.NET Core Identity. Основные понятия и примеры, показанные в этом разделе, применяются одинаково к приложениям, используюющим ASP.NET Core Identity. Чтобы использовать ASP.NET Core Identity, следуйте инструкциям в статье "Введение Identity в ASP.NET Core".

Требовать авторизацию для доступа к странице

AuthorizePage Используйте соглашение, чтобы добавить AuthorizeFilter страницу по указанному пути:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Указанный путь — это путь модуля представления, который является Razor корневым относительным путем Pages без расширения и содержит только косую черту.

Чтобы указать политику авторизации, используйте перегрузку AuthorizationPage:

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

Примечание.

Можно AuthorizeFilter применить к классу модели страницы с атрибутом [Authorize] фильтра. Дополнительные сведения см. в разделе "Авторизовать атрибут фильтра".

Требовать авторизацию для доступа к папке страниц

AuthorizeFolder Используйте соглашение, чтобы добавить AuthorizeFilter все страницы в папку по указанному пути:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Указанный путь — это путь модуля представления, который является корневым относительным путем Razor Pages.

Чтобы указать политику авторизации, используйте перегрузку AuthorizationFolder:

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

Требовать авторизацию для доступа к странице области

AuthorizeAreaPage Используйте соглашение, чтобы добавить AuthorizeFilter страницу области по указанному пути:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

Имя страницы — это путь к файлу без расширения относительно корневого каталога страниц для указанной области. Например, имя страницы файла Areas/Identity/Pages/Manage/Accounts.cshtml/Manage/Accounts.

Чтобы указать политику авторизации, используйте перегрузку AuthorizationAreaPage:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

Требовать авторизацию для доступа к папке областей

AuthorizeAreaFolder Используйте соглашение, чтобы добавить AuthorizeFilter все области в папке по указанному пути:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

Путь к папке — это путь к папке относительно корневого каталога страниц для указанной области. Например, путь к папке для файлов в разделе "Области/Страницы"Identity/ "Управление" имеет значение /Manage.

Чтобы указать политику авторизации, используйте перегрузку AuthorizationAreaFolder:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

Разрешить анонимный доступ к странице

AllowAnonymousToPage Используйте соглашение, чтобы добавить AllowAnonymousFilter страницу по указанному пути:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Указанный путь — это путь модуля представления, который является Razor корневым относительным путем Pages без расширения и содержит только косую черту.

Разрешить анонимный доступ к папке страниц

AllowAnonymousToFolder Используйте соглашение, чтобы добавить AllowAnonymousFilter все страницы в папку по указанному пути:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

Указанный путь — это путь модуля представления, который является корневым относительным путем Razor Pages.

Примечание о сочетании авторизованного и анонимного доступа

Допустимо указать, что для папки страниц требуется авторизация, а затем указать, что страница в этой папке разрешает анонимный доступ:

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

Обратный, однако, не является допустимым. Невозможно объявить папку страниц для анонимного доступа, а затем указать страницу в этой папке, требующей авторизации:

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

Требование авторизации на частной странице завершается ошибкой. AllowAnonymousFilter При применении и AuthorizeFilter к странице AllowAnonymousFilter имеет приоритет и управляет доступом.

Дополнительные ресурсы

Одним из способов управления доступом в Razor приложении Pages является использование соглашений о авторизации при запуске. Эти соглашения позволяют авторизовать пользователей и разрешить анонимным пользователям доступ к отдельным страницам или папкам страниц. Соглашения, описанные в этом разделе, автоматически применяют фильтры авторизации для управления доступом.

Просмотреть или скачать образец кода (описание загрузки)

В примере приложения используется cookie проверка подлинности без ASP.NET Core Identity. Основные понятия и примеры, показанные в этом разделе, применяются одинаково к приложениям, используюющим ASP.NET Core Identity. Чтобы использовать ASP.NET Core Identity, следуйте инструкциям в статье "Введение Identity в ASP.NET Core".

Требовать авторизацию для доступа к странице

AuthorizePage Используйте соглашение, AddRazorPagesOptions чтобы добавить страницу 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);

Указанный путь — это путь модуля представления, который является Razor корневым относительным путем Pages без расширения и содержит только косую черту.

Чтобы указать политику авторизации, используйте перегрузку AuthorizationPage:

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

Примечание.

Можно AuthorizeFilter применить к классу модели страницы с атрибутом [Authorize] фильтра. Дополнительные сведения см. в разделе "Авторизовать атрибут фильтра".

Требовать авторизацию для доступа к папке страниц

AuthorizeFolder Используйте соглашение, AddRazorPagesOptions чтобы добавить 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);

Указанный путь — это путь модуля представления, который является корневым относительным путем Razor Pages.

Чтобы указать политику авторизации, используйте перегрузку AuthorizationFolder:

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

Требовать авторизацию для доступа к странице области

AuthorizeAreaPage Используйте соглашение, AddRazorPagesOptions чтобы добавить страницу AuthorizeFilter области по указанному пути:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

Имя страницы — это путь к файлу без расширения относительно корневого каталога страниц для указанной области. Например, имя страницы файла Areas/Identity/Pages/Manage/Accounts.cshtml/Manage/Accounts.

Чтобы указать политику авторизации, используйте перегрузку AuthorizationAreaPage:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

Требовать авторизацию для доступа к папке областей

AuthorizeAreaFolder Используйте соглашение, AddRazorPagesOptions чтобы добавить AuthorizeFilter все области в папку по указанному пути:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

Путь к папке — это путь к папке относительно корневого каталога страниц для указанной области. Например, путь к папке для файлов в разделе "Области/Страницы"Identity/ "Управление" имеет значение /Manage.

Чтобы указать политику авторизации, используйте перегрузку AuthorizationAreaFolder:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

Разрешить анонимный доступ к странице

AllowAnonymousToPage Используйте соглашение, AddRazorPagesOptions чтобы добавить 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);

Указанный путь — это путь модуля представления, который является Razor корневым относительным путем Pages без расширения и содержит только косую черту.

Разрешить анонимный доступ к папке страниц

AllowAnonymousToFolder Используйте соглашение, AddRazorPagesOptions чтобы добавить 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);

Указанный путь — это путь модуля представления, который является корневым относительным путем Razor Pages.

Примечание о сочетании авторизованного и анонимного доступа

Допустимо указать, что папка страниц, требующая авторизации, и указать, что страница в этой папке разрешает анонимный доступ:

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

Обратный, однако, не является допустимым. Невозможно объявить папку страниц для анонимного доступа, а затем указать страницу в этой папке, требующей авторизации:

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

Требование авторизации на частной странице завершается ошибкой. AllowAnonymousFilter При применении и AuthorizeFilter к странице AllowAnonymousFilter имеет приоритет и управляет доступом.

Дополнительные ресурсы