Защитите свое базовое веб-приложение ASP.NET с помощью проверки подлинности носителя JWT: подробное руководство

В этой статье блога мы погрузимся в мир аутентификации носителя JWT в ASP.NET Core. Мы рассмотрим различные методы и приемы защиты вашего веб-приложения с помощью этого популярного механизма аутентификации. Итак, начнем!

Метод 1. Настройка проверки подлинности носителя JWT в ASP.NET Core
Для начала необходимо настроить проверку подлинности носителя JWT в приложении ASP.NET Core. Это включает в себя добавление необходимых пакетов NuGet и настройку промежуточного программного обеспечения аутентификации в файле Startup.cs. Вот пример:

// Inside ConfigureServices method in Startup.cs
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "your-issuer",
            ValidAudience = "your-audience",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
        };
    });

Метод 2: выпуск и проверка токенов JWT
После того, как вы настроили аутентификацию носителя JWT, вы можете выдавать и проверять токены JWT в своем приложении. Для этой цели вы можете использовать такие библиотеки, как System.IdentityModel.Tokens.Jwtили Microsoft.IdentityModel.Tokens. Вот пример:

// Issuing a JWT token
var claims = new List<Claim>
{
    new Claim(ClaimTypes.Name, "John Doe"),
    // Add more claims as needed
};
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"));
var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
    issuer: "your-issuer",
    audience: "your-audience",
    claims: claims,
    expires: DateTime.UtcNow.AddHours(1),
    signingCredentials: signingCredentials
);
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
// Validating a JWT token
var tokenHandler = new JwtSecurityTokenHandler();
var validationParameters = new TokenValidationParameters
{
    ValidateIssuer = true,
    ValidateAudience = true,
    ValidateIssuerSigningKey = true,
    ValidIssuer = "your-issuer",
    ValidAudience = "your-audience",
    IssuerSigningKey = secretKey
};
try
{
    var principal = tokenHandler.ValidateToken(tokenString, validationParameters, out _);
    // Token is valid, perform further operations
}
catch (SecurityTokenValidationException)
{
    // Token validation failed
}

Метод 3. Защита конечных точек API с помощью аутентификации носителя JWT
Вы можете защитить конечные точки API, применив атрибут [Authorize]и указав схему аутентификации как JwtBearerDefaults.AuthenticationScheme. Вот пример:

[ApiController]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class MyApiController : ControllerBase
{
    // API endpoint code here
}

Метод 4. Обновление токенов JWT
Чтобы реализовать функцию обновления токена, вы можете выпустить токен обновления вместе с токеном доступа и надежно сохранить его (например, в базе данных). По истечении срока действия токена доступа клиент может запросить новый токен доступа, используя токен обновления. Это можно сделать путем реализации конечной точки обновления токена и проверки токена обновления. Вот пример высокого уровня:

[HttpPost("refresh-token")]
public IActionResult RefreshToken([FromBody] RefreshTokenRequest request)
{
    // Validate the refresh token and issue a new access token
    // Return the new access token to the client
}

В этой статье мы рассмотрели различные методы и приемы реализации аутентификации носителя JWT в ASP.NET Core. Мы рассмотрели настройку аутентификации, выдачу и проверку токенов JWT, защиту конечных точек API и реализацию функции обновления токена. Следуя этим рекомендациям, вы сможете обеспечить безопасность своего веб-приложения ASP.NET Core. Приятного кодирования!