Autorización y autenticación en C# (.NET)
En el desarrollo web moderno en la plataforma .NET, los temas de autenticación (verificación de la identidad del usuario) y autorización (verificación de permisos de acceso) son fundamentales. Las bibliotecas y mecanismos integrados de ASP.NET Core proporcionan un conjunto de herramientas potente y flexible para implementar estas tareas. En este artículo, analizaremos en detalle los enfoques principales, incluyendo el uso de JWT (JSON Web Tokens), ASP.NET Core Identity y componentes middleware integrados.
Conceptos principales
- Autenticación (Authentication) — proceso de verificar quién es el usuario (por ejemplo, usuario + contraseña).
- Autorización (Authorization) — proceso de determinar qué puede hacer el usuario (roles, políticas, claims).
- Identidad basada en claims (Claims-based identity) — enfoque en el que la información del usuario se almacena como un conjunto de afirmaciones (claims).
ASP.NET Core Identity
ASP.NET Core Identity es un sistema completo de gestión de usuarios que incluye registro, inicio de sesión, restablecimiento de contraseña, autenticación de dos factores y gestión de roles. Utiliza Entity Framework Core para almacenar datos en la base de datos.
Para conectar Identity en un proyecto, basta con agregar la llamada AddDefaultIdentity y configurar la cadena de conexión. Ejemplo de configuración básica en Program.cs:
using Microsoft.AspNetCore.Identity;using Microsoft.EntityFrameworkCore;using YourApp.Data;
var builder = WebApplication.CreateBuilder(args);
// Agregamos el contexto de BDbuilder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
// Agregamos Identitybuilder.Services.AddDefaultIdentity<IdentityUser>(options => { options.SignIn.RequireConfirmedAccount = false; options.Password.RequireDigit = true; options.Password.RequiredLength = 6;}).AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddControllersWithViews();
var app = builder.Build();
app.UseAuthentication();app.UseAuthorization();
app.MapRazorPages();app.Run();Después de esto, tendrás disponibles las páginas estándar de registro e inicio de sesión, así como métodos para verificar roles:
[Authorize(Roles = "Admin")]public IActionResult AdminPanel(){ return View();}Autenticación JWT (JSON Web Tokens)
JWT es una forma compacta y autónoma de transmitir información entre partes como un objeto JSON. En .NET, JWT se utiliza a menudo para crear API REST y aplicaciones SPA. La biblioteca principal es Microsoft.AspNetCore.Authentication.JwtBearer.
Configuración de JWT en Program.cs:
using Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.IdentityModel.Tokens;using System.Text;
var builder = WebApplication.CreateBuilder(args);
var key = Encoding.ASCII.GetBytes("YourSuperSecretKeyThatIsAtLeast32CharactersLong!");
builder.Services.AddAuthentication(options =>{ options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;}).AddJwtBearer(options =>{ options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "yourdomain.com", ValidAudience = "yourdomain.com", IssuerSigningKey = new SymmetricSecurityKey(key) };});
builder.Services.AddAuthorization();builder.Services.AddControllers();
var app = builder.Build();app.UseAuthentication();app.UseAuthorization();app.MapControllers();app.Run();Ejemplo