Перейти к содержанию

Использование политик для авторизации на основе утверждений

Ранее мы узнали, как сделать так, чтобы пользователи выполняли вход для доступа к конечной точке. Теперь рассмотрим, как применять дополнительные требования.
Аутентификация в ASP.NET Core сосредоточена вокруг объекта ClaimsPrincipal, у которого имеется коллекция утверждений, содержащих информацию о пользователе.
Эти утверждения можно, помимо прочего, использовать для авторизации.

В ASP.NET Core правила, определяющие, авторизован ли пользователь, инкапсулированы в политике. Политики можно применять с помощью атрибута [Authorize]:

[Authorize("CanEnterSecurity")] //Указываем политику
public class AirportSecurityModel : PageModel
{
    public void OnGet() { } //Только пользователи, удовлетворяющие политике, могут выполнять страницу
}

Если пользователь попытается выполнить страницу AirportSecurity.cshtml, компонент авторизации проверит, отвечает ли пользователь требованиям политики. Возможен один из трёх исходов:

  • пользователь отвечает требованиям политикиEndpointMiddleware выполняет страницу, как обычно;
  • пользователь не прошел аутентификацию — пользователь перенаправляется на страницу входа;
  • пользователь прошел аутентификацию, но не отвечает требованиям политики — пользователь перенаправляется на страницу “отказано в доступе”.

Политики добавляются в приложение ASP.NET Core в методе ConfigureServices файла Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options => 
    {
        options.AddPolicy("CanEnterSecurity", policyBuilder => policyBuilder.RequireClaim("BoardingPassNumber"));
    });
    //конфигурируем далее...
}

Здесь политика представляет собой требование наличия утверждения BoardingPassNumber. Если необходимо наличие конкретного значения, его можно указать:
policyBuilder => policyBuilder.RequireClaim("BoardingPassNumber", "A1234");

Класс AuthorizationPolicyBuilder содежит несколько методов для создания простых политик:

Метод Поведение политики
RequireAuthenticatedUser() Пользователь должен быть аутентифицирован. Создает политику, аналогичную атрибуту [Authorize] по умолчанию
RequireClaim(утверждение, значения) У пользователя должно быть указанное утверждение. Если это предусмотрено, то оно должно быть одним из указанных значений
RequireUsername(имя пользователя) У пользователя должно быть указанное имя пользователя
RequireAssertion(функция) Выполняет предоставленную лямбда-функцию, которая возвращает логическое значение, указывая на то, отвечаете ли вы требованиям политики

Для более сложных политик рекомендуется создавать специальные политики, об этом сказано здесь.


Последнее обновление : 5 мая 2023 г.
Дата создания : 8 октября 2022 г.

Комментарии

Комментарии