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