Поделиться через


Razor Соглашения об авторизации страниц в 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 без расширения и содержит только косую черту.

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

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

Note

Можно 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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 без расширения и содержит только косую черту.

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

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

Note

Можно 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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 имеет приоритет и контролирует доступ.

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