Использование политик для авторизации на основе утверждений¶
Ранее мы узнали, как сделать так, чтобы пользователи выполняли вход для доступа к конечной точке. Теперь рассмотрим, как применять дополнительные требования.
Аутентификация в 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. Если необходимо наличие конкретного значения, его можно указать:Класс
AuthorizationPolicyBuilder содежит несколько методов для создания простых политик:
| Метод | Поведение политики |
|---|---|
RequireAuthenticatedUser() |
Пользователь должен быть аутентифицирован. Создает политику, аналогичную атрибуту [Authorize] по умолчанию |
RequireClaim(утверждение, значения) |
У пользователя должно быть указанное утверждение. Если это предусмотрено, то оно должно быть одним из указанных значений |
RequireUsername(имя пользователя) |
У пользователя должно быть указанное имя пользователя |
RequireAssertion(функция) |
Выполняет предоставленную лямбда-функцию, которая возвращает логическое значение, указывая на то, отвечаете ли вы требованиям политики |
Для более сложных политик рекомендуется создавать специальные политики, об этом сказано здесь.
Последнее обновление :
5 мая 2023 г.
Дата создания : 8 октября 2022 г.
Дата создания : 8 октября 2022 г.