Autorización y autenticación en C# (.NET): desde los fundamentos hasta soluciones empresariales
La seguridad de las aplicaciones web es un aspecto crítico del desarrollo, y en el ecosistema C# (.NET) existe un potente conjunto de herramientas para implementar autenticación (verificación de la identidad del usuario) y autorización (verificación de permisos de acceso). En este artículo, analizaremos los enfoques clave: desde el integrado ASP.NET Core Identity hasta soluciones flexibles basadas en JWT y OAuth 2.0.
1. ASP.NET Core Identity — sistema integrado de gestión de usuarios
ASP.NET Core Identity es un framework completo para registro, inicio de sesión, gestión de roles y contraseñas. Proporciona modelos listos (User, Role), almacenamiento (por defecto Entity Framework + SQL Server) y middleware.
// Registro en Program.csbuilder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
builder.Services.AddDefaultIdentity<IdentityUser>(options =>{ options.SignIn.RequireConfirmedAccount = true; options.Password.RequiredLength = 8;}).AddRoles<IdentityRole>().AddEntityFrameworkStores<AppDbContext>();
// Middlewareapp.UseAuthentication();app.UseAuthorization();Ejemplo de controlador con protección:
[Authorize(Roles = "Admin")]public class AdminController : Controller{ public IActionResult Index() => View();}
// Obtener el usuario actualvar user = await _userManager.GetUserAsync(User);var roles = await _userManager.GetRolesAsync(user);2. JWT (JSON Web Token) — autenticación sin fisuras para API y SPA
JWT es un token compacto y seguro para URL que contiene claims (declaraciones) sobre el usuario. Es ideal para REST API, aplicaciones móviles y Single Page Applications (React, Angular, Vue).
Instalación del paquete:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearerConfiguración en Program.cs:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = "https://pythonlib.ru", ValidateAudience = true, ValidAudience = "https://api.pythonlib.ru", ValidateLifetime = true, IssuerSigningKey = new SymmetricSecurityKey( Encoding.UTF8.GetBytes("SuperSecretKey123!SuperSecretKey123!")), ClockSkew = TimeSpan.Zero }; });Generación del token (por ejemplo, en el controlador de inicio de sesión):
var claims = new List<Claim>{ new Claim(ClaimTypes.Name, user.UserName), new Claim(ClaimTypes.Role, "User"), new Claim("custom_claim", "value")};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey123!"));var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken( issuer: "https://pythonlib.ru", audience: "https://api.pythonlib.ru", claims: claims, expires: DateTime.Now.AddHours(2), signingCredentials: creds);
return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });Protección del endpoint:
[Authorize][HttpGet("profile")]public IActionResult GetProfile(){ var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; return Ok(new { Message = "Acceso concedido", UserId = userId });}3. Autenticación por Cookie — el clásico para aplicaciones MVC
Para aplicaciones de servidor tradicionales (Razor Pages, MVC) es conveniente usar autenticación por cookie. El usuario recibe una cookie encriptada que se envía automáticamente
También en la biblioteca
Trabajo con Kafka en Kotlin: bibliotecas y ejemplos
Generación de PDF en Java: revisión de las bibliotecas iText, Apache PDFBox, OpenPDF
Configuración de aplicaciones en C++: bibliotecas y herramientas para una configuración flexible
Generación de PDF en PHP: mejores bibliotecas y ejemplos de código