Авторизация на основе политик
Определяйте повторно используемые политики авторизации.
«Авторизация на основе политик» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Модель политик
В ASP.NET Core каждая проверка авторизации в конечном счёте выполняется через политику. Атрибуты ролей и утверждений — это сокращённая запись, которая создаёт политики за кулисами.
Определение именованных политик централизует правила и помогает сохранить контроллеры чистыми.
[Authorize(Policy = "CanManageOrders")]AddAuthorization
Зарегистрируйте политики в контейнере служб с помощью AddAuthorization. Каждой политике присваивается уникальное имя.
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("CanManageOrders", policy =>
policy.RequireRole("admin", "sales"));
});RequireAuthenticatedUser
Самое простое требование — пользователь должен войти в систему. RequireAuthenticatedUser отклоняет анонимные вызовы.
options.AddPolicy("SignedIn", policy =>
policy.RequireAuthenticatedUser());Объединение требований
Создатель политики объединяет несколько требований в цепочку; политика выполняется, только если проходят все требования.
options.AddPolicy("SeniorEditor", policy =>
policy
.RequireAuthenticatedUser()
.RequireRole("editor")
.RequireClaim("seniority", "senior"));Политика по умолчанию
Простое [Authorize] без аргументов использует политику по умолчанию, которая изначально требует только аутентификации пользователя. Её можно заменить.
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireClaim("email_verified", "true")
.Build();Резервная политика
Резервная политика применяется к конечным точкам, у которых вообще нет атрибута авторизации, — это эффективный способ включить защиту по умолчанию.
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
// Now every endpoint requires auth unless marked [AllowAnonymous]Отказ от авторизации с AllowAnonymous
Если резервная политика закрывает доступ ко всему, используйте [AllowAnonymous], чтобы открыть общедоступные конечные точки, например вход в систему или проверки работоспособности.
[AllowAnonymous]
[HttpGet("health")]
public IActionResult Health() => Ok("healthy");Применение политик к конечным точкам
Сошлитесь на политику по имени в атрибутах или расширениях минимальных API.
// Controller
[Authorize(Policy = "SeniorEditor")]
public IActionResult Publish() => Ok();
// Minimal API
app.MapPost("/publish", () => Results.Ok())
.RequireAuthorization("SeniorEditor");Группировка конечных точек
Примените политику ко всей группе маршрутов, чтобы каждая содержащаяся в ней конечная точка унаследовала эту политику.
var admin = app.MapGroup("/admin")
.RequireAuthorization("CanManageOrders");
admin.MapGet("/stats", () => Results.Ok());
admin.MapDelete("/{id}", (int id) => Results.NoContent());Требования под капотом
Каждый вызов Require* добавляет в политику объект IAuthorizationRequirement. Подходящий обработчик оценивает каждое требование. Для встроенных требований это выполняется автоматически; для пользовательских правил нужен пользовательский обработчик (в следующем уроке).
// RequireRole("admin") adds a RolesAuthorizationRequirement
// RequireClaim(...) adds a ClaimsAuthorizationRequirementГде определять политики
Храните все определения политик в одном методе расширения, чтобы их было легко найти и проверять.
public static IServiceCollection AddAppPolicies(
this IServiceCollection services)
{
services.AddAuthorization(o =>
{
o.AddPolicy("SignedIn", p => p.RequireAuthenticatedUser());
o.AddPolicy("CanManageOrders", p => p.RequireRole("admin"));
});
return services;
}Быстрая проверка
Проверьте, понимаете ли вы разницу между политиками по умолчанию и резервными политиками.
Итоги
Вы изучили авторизацию на основе политик:
AddPolicyопределяет именованные правила, которые можно повторно использовать.RequireAuthenticatedUser,RequireRoleиRequireClaimобъединяются с семантикой AND.- DefaultPolicy используется простым
[Authorize], а FallbackPolicy защищает конечные точки без явной отметки. [AllowAnonymous]позволяет отказаться от этой защиты.
Далее: пользовательские требования и обработчики авторизации.
Часто задаваемые вопросы
Урок «Авторизация на основе политик» бесплатный?
Да — полный текст урока «Авторизация на основе политик» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Авторизация на основе политик»?
Определяйте повторно используемые политики авторизации. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Авторизация на основе политик»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Авторизация на основе ролей
- Авторизация на основе утверждений
- Авторизация на основе политик
- Пользовательские требования авторизации