0Pricing
C# Academy · Урок

Авторизация на основе политик

Определяйте повторно используемые политики авторизации.

«Авторизация на основе политик» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Авторизация на основе ролей
  2. Авторизация на основе утверждений
  3. Авторизация на основе политик
  4. Пользовательские требования авторизации
← Назад к C# Academy