0Pricing
C# Academy · Урок

Авторизация на основе утверждений

Авторизуйте пользователей на основе их утверждений.

«Авторизация на основе утверждений» — бесплатный урок C# Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

За пределами ролей

Роли — это частный случай утверждений. Авторизация на основе утверждений проверяет любое утверждение — электронную почту, отдел, уровень подписки, признак разрешения, — а не только роли.

Это обеспечивает более точный контроль без необходимости придумывать десятки ролей.

// Claims a user might carry:
// department = sales
// subscription = pro
// email_verified = true

Добавление утверждений в токен

Добавляйте любые утверждения, которые будут проверять правила авторизации. Утверждение представляет собой пару «тип/значение».

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
    new Claim("department", "sales"),
    new Claim("subscription", "pro"),
    new Claim("email_verified", "true")
};

Определение политики утверждений

Правила на основе утверждений задаются как именованные политики, зарегистрированные с помощью AddAuthorization. RequireClaim требует наличия у пользователя указанного утверждения.

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("VerifiedEmail", policy =>
        policy.RequireClaim("email_verified", "true"));
});

RequireClaim без значения

Если важно только то, что утверждение существует (независимо от значения), вызовите RequireClaim, указав только его тип.

options.AddPolicy("HasDepartment", policy =>
    policy.RequireClaim("department"));

RequireClaim с допустимыми значениями

Можно перечислить допустимые значения; политика выполняется, если утверждение совпадает с любым из них.

options.AddPolicy("PaidTier", policy =>
    policy.RequireClaim("subscription", "pro", "enterprise"));

Применение политики утверждений

Сошлитесь на политику по имени в [Authorize].

[Authorize(Policy = "PaidTier")]
[HttpGet("premium-reports")]
public IActionResult Reports() => Ok();

Использование в минимальных API

Минимальные API обращаются к той же политике по имени через RequireAuthorization.

app.MapGet("/premium-reports", () => Results.Ok())
   .RequireAuthorization("PaidTier");

Объединение нескольких требований к утверждениям

В политике можно последовательно вызвать RequireClaim несколько раз; все требования должны быть выполнены (AND).

options.AddPolicy("VerifiedSales", policy =>
    policy
        .RequireClaim("email_verified", "true")
        .RequireClaim("department", "sales"));

RequireAssertion для пользовательской логики

Когда проверки фиксированного значения недостаточно, RequireAssertion выполняет произвольное логическое условие над ClaimsPrincipal.

options.AddPolicy("AdultUser", policy =>
    policy.RequireAssertion(ctx =>
    {
        var dob = ctx.User.FindFirst("birthdate")?.Value;
        return DateTime.TryParse(dob, out var d) &&
               d <= DateTime.UtcNow.AddYears(-18);
    }));

Чтение утверждений во время выполнения

Внутри действия можно по-прежнему напрямую просматривать утверждения, когда нужно получить значение, а не только проверить условие да/нет.

var dept = User.FindFirst("department")?.Value;
var isPro = User.HasClaim("subscription", "pro");

Утверждения и роли — когда что использовать

Используйте роли для общих должностных функций. Используйте утверждения для атрибутов и признаков функций. Они объединяются: политика может одновременно требовать роль и несколько утверждений.

options.AddPolicy("SalesManager", policy =>
    policy.RequireRole("manager")
          .RequireClaim("department", "sales"));

Быстрая проверка

Проверьте, насколько хорошо вы понимаете политики утверждений.

Итоги

Вы изучили авторизацию на основе утверждений:

  • Доступ можно ограничить любым утверждением, а не только ролью.
  • RequireClaim проверяет наличие утверждения или конкретные допустимые значения.
  • RequireAssertion обрабатывает пользовательскую логику проверки условия.
  • Утверждения и роли объединяются в одной именованной политике.

Далее: полноценная модель авторизации на основе политик.

Часто задаваемые вопросы

Урок «Авторизация на основе утверждений» бесплатный?

Да — полный текст урока «Авторизация на основе утверждений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Авторизация на основе утверждений»?

Авторизуйте пользователей на основе их утверждений. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Авторизация на основе утверждений»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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