При разработке API на ASP.NET Core важно обеспечить безопасный доступ к ресурсам. Для этого используются механизмы аутентификации и авторизации.
Аутентификация в ASP.NET Core
Аутентификация (Authentication) — это процесс проверки подлинности пользователя. В ASP.NET Core поддерживается несколько схем аутентификации, таких как:
- JWT (JSON Web Token)
- OAuth 2.0
- OpenID Connect
- Cookie-based
Настройка аутентификации с JWT
JWT — один из самых распространенных способов аутентификации API. Для настройки JWT-аутентификации необходимо добавить в проект пакет Microsoft.AspNetCore.Authentication.JwtBearer
и сконфигурировать сервисы аутентификации в Program.cs
:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
};
});
builder.Services.AddAuthorization();
builder.Services.AddControllers();
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
Авторизация в ASP.NET Core
Авторизация (Authorization) определяет права пользователя на доступ к определенным ресурсам. В ASP.NET Core авторизация может быть:
- На основе ролей (Role-based Authorization)
- На основе политик (Policy-based Authorization)
- На основе требований (Claims-based Authorization)
Авторизация на основе ролей
Ролевая авторизация позволяет ограничивать доступ к контроллерам или методам на основе ролей пользователя:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Authorize(Roles = "Admin")]
[ApiController]
[Route("api/admin")]
public class AdminController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok("Доступ разрешен только администраторам");
}
}
Авторизация на основе политик
Авторизация на основе политик авторизация позволяет задавать более гибкие правила доступа, основанные на кастомных политиках:
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("OnlyForEditors", policy => policy.RequireClaim("Editor"));
});
Затем эту политику можно применить к контроллеру или методу:
[Authorize(Policy = "OnlyForEditors")]
[ApiController]
[Route("api/editor")]
public class EditorController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok("Доступ разрешен только редакторам");
}
}
Защита эндпоинтов API
Для защиты API необходимо явно указывать [Authorize]
над контроллерами или методами. Если доступ должен быть открыт для всех, можно использовать [AllowAnonymous]
:
[AllowAnonymous]
[HttpGet("public")]
public IActionResult PublicEndpoint()
{
return Ok("Этот эндпоинт доступен без аутентификации");
}
Аутентификация и авторизация являются важными аспектами защиты API в ASP.NET Core. Использование JWT позволяет безопасно проверять подлинность пользователей, а ролевые и политические механизмы авторизации помогают управлять доступом к ресурсам.