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 имеет приоритет и управляет доступом.
Дополнительные ресурсы
ASP.NET Core
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по