Разница между атрибутом авторизации и методом AuthorizePage (строка)

#c# #asp.net #asp.net-core-mvc #razor-pages #asp.net-authorization

#c# #asp.net #asp.net-core-mvc #razor-страницы #asp.net-авторизация

Вопрос:

Мне интересно, есть ли какая-либо разница между [Authorize] атрибутом и AuthorizePage(string) методом в ASP.NET Ядро? Проект использует ASP.NET Ядро 3.1. Есть ли какие-либо преимущества или недостатки в его использовании?

Как я хорошо знаю, два приведенных ниже кода делают одно и то же:

Использование [Authorize] атрибута

 // ...
namespace MyApp.Account.Manage
{
    [Authorize]
    public partial class IndexModel : PageModel
    {
// ...
  

Использование AuthorizePage(string) метода в Startup.ConfigureServices

 services.AddMvc()
  .AddMvcOptions(o => o.EnableEndpointRouting = false)
  .AddRazorPagesOptions(options =>
  {
     options.Conventions.AuthorizePage("Account/Manage");
  });
  

Комментарии:

1. Документация ( learn.microsoft.com/en-us/aspnet/core/security/authorization /… ) четко указано: «Используйте соглашение AuthorizePage для добавления AuthorizeFilter на страницу по указанному пути»

2. Атрибут @haim770 [Авторизовать] также добавляет авторизацию по указанному пути.

3. Согласно learn.microsoft.com/en-us/aspnet/core/security/authorization /… , они оба работают. Поэтому выберите тот, который вам больше нравится.

Ответ №1:

Вы правы, как атрибут [Authorize], так и AuthorizePage() задают авторизацию для указанной страницы.

Использование [Authorize] атрибута.

Атрибут авторизации, используемый при авторизации на основе ролей, позволяет ограничить доступ к ресурсам на основе ролей. Это декларативный атрибут, который может быть применен к контроллеру, методу действия или странице Razor. Если вы укажете этот атрибут без каких-либо аргументов, он только проверяет, аутентифицирован ли пользователь.

С помощью атрибута авторизации, когда пользователь обращается к указанному контроллеру, методу действия или странице Razor, он проверяет, имеет ли текущий пользователь разрешение на доступ к нему.

С использованием метода AddRazorPagesOptions и метода AuthorizePage().

Asp.net core предоставляет один из способов управления доступом в вашем приложении Razor Pages — использовать соглашения об авторизации при запуске. Используя этот способ, мы могли бы использовать метод AddRazorPagesOptions для добавления соглашений на страницы, например, использовать метод AuthorizePage для добавления авторизации на указанную страницу (то же самое с атрибутом авторизации).

Но, используя метод соглашений об авторизации, он предоставляет связанные методы для добавления авторизации в папку страниц, страницу области или папку областей.

Итак, если вы просто хотите установить авторизацию для указанной страницы, вы можете использовать каждый из них. Но, если вы хотите установить авторизацию для нескольких страниц, лучше использовать метод соглашений об авторизации. Более подробную информацию см. в соглашениях об авторизации Razor Pages в ASP.NET Ядро.