Настройка аутентификации JWT Bearer
Настройте проверку токенов в конвейере.
«Настройка аутентификации JWT Bearer» — бесплатный урок C# Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Обработчик JWT Bearer
ASP.NET Core проверяет входящие JWT с помощью обработчика аутентификации JWT Bearer из пакета Microsoft.AspNetCore.Authentication.JwtBearer.
Он считывает токен из заголовка Authorization: Bearer ..., проверяет его и создаёт объект ClaimsPrincipal.
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearerAddAuthentication
Регистрация начинается с AddAuthentication. Укажите схему по умолчанию, чтобы платформа знала, какой обработчик использовать, если схема не задана.
JwtBearerDefaults.AuthenticationScheme — это строка "Bearer".
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer();Параметры AddJwtBearer
Перегрузка AddJwtBearer принимает делегат параметров, в котором настраивается способ проверки токенов.
Наиболее важное свойство — TokenValidationParameters.
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
// configured below
};
});Проверка издателя и аудитории
Установите ValidateIssuer и ValidateAudience, чтобы убедиться, что токен выдан вашим доверенным центром и предназначен для вашего API.
ValidIssuer и ValidAudience должны совпадать с утверждениями iss и aud в токене.
var tvp = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidateAudience = true,
ValidAudience = builder.Configuration["Jwt:Audience"]
};Проверка ключа подписи
Наиболее важная с точки зрения безопасности проверка — ValidateIssuerSigningKey вместе с IssuerSigningKey. Она подтверждает, что подпись создана с использованием вашего секрета.
Для симметричной подписи (HS256 создайте объект SymmetricSecurityKey из байтов секрета.
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!));
tvp.ValidateIssuerSigningKey = true;
tvp.IssuerSigningKey = key;Проверка срока действия
ValidateLifetime = true отклоняет просроченные токены, проверяя утверждения exp и nbf.
ClockSkew добавляет допуск на расхождение часов между серверами. Значение по умолчанию — 5 минут; для токенов с коротким сроком действия его следует уменьшить.
tvp.ValidateLifetime = true;
tvp.ClockSkew = TimeSpan.FromSeconds(30);Объединение всех настроек
Полная конфигурация, подходящая для промышленного использования, объединяет все параметры проверки в одном месте.
builder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidateAudience = true,
ValidAudience = builder.Configuration["Jwt:Audience"],
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!)),
ValidateLifetime = true,
ClockSkew = TimeSpan.FromSeconds(30)
};
});Порядок промежуточного ПО
Одной конфигурации недостаточно. Необходимо добавить промежуточное ПО для аутентификации и авторизации в конвейер, причём порядок имеет значение.
UseAuthentication должен находиться перед UseAuthorization.
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();Защита конечных точек
После настройки пометьте конечные точки атрибутом [Authorize] (контроллеры) или вызовом .RequireAuthorization() (минимальные API), чтобы требовать действительный токен.
app.MapGet("/me", (ClaimsPrincipal user) =>
new { id = user.FindFirstValue(ClaimTypes.NameIdentifier) })
.RequireAuthorization();Использование доверенного центра
Если ваши токены поступают от внешнего поставщика удостоверений (например, Microsoft Entra ID или Auth0), укажите Authority вместо статического ключа.
После этого обработчик автоматически загружает ключи подписи из документа обнаружения поставщика.
.AddJwtBearer(options =>
{
options.Authority = "https://login.myidp.com/";
options.Audience = "my-api";
// Keys are fetched from the OpenID configuration endpoint
});Анализ ошибок проверки
JWT Bearer создаёт события, для которых можно подключить обработчики ведения журнала или собственных ответов, например OnAuthenticationFailed и OnChallenge.
options.Events = new JwtBearerEvents
{
OnAuthenticationFailed = ctx =>
{
logger.LogWarning(ctx.Exception, "JWT validation failed");
return Task.CompletedTask;
}
};Быстрая проверка
Проверьте, насколько хорошо вы поняли настройку конвейера.
Повторение
Вы настроили аутентификацию JWT Bearer:
AddAuthentication(...).AddJwtBearer(...)регистрирует обработчик.TokenValidationParametersуправляет проверками издателя, аудитории, ключа подписи и срока действия.UseAuthentication()должен вызываться передUseAuthorization().- Используйте
Authorityдля внешних поставщиков удостоверений.
Далее: как выдавать собственные токены.
Часто задаваемые вопросы
Урок «Настройка аутентификации JWT Bearer» бесплатный?
Да — полный текст урока «Настройка аутентификации JWT Bearer» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Настройка аутентификации JWT Bearer»?
Настройте проверку токенов в конвейере. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Настройка аутентификации JWT Bearer»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Структура JWT и утверждения
- Настройка аутентификации JWT Bearer
- Выдача токенов
- Токены обновления и срок действия