Autorización y autenticación en C# (.NET): Guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Autorización y autenticación en C# (.NET): Guía completa



La seguridad de las aplicaciones web es la piedra angular del desarrollo moderno. En el ecosistema de C# (.NET), los mecanismos integrados de autenticación y autorización permiten proteger su aplicación de manera flexible y confiable. En este artículo, analizaremos los conceptos clave, las herramientas y los ejemplos de código para trabajar con Identity, JWT y el modelo de roles.



1. Conceptos básicos

Antes de pasar al código, es importante diferenciar dos términos:

  • Autenticación — el proceso de verificar la identidad del usuario (¿quién es usted?). Generalmente se realiza mediante inicio de sesión/contraseña, tokens o proveedores externos.
  • Autorización — el proceso de determinar los derechos de acceso (¿qué puede hacer usted?). Se implementa mediante roles, políticas o claims.


2. ASP.NET Core Identity — solución integrada

Microsoft.AspNetCore.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 mucho más. Funciona con Entity Framework Core y admite cualquier almacenamiento de datos.



Instalación:

dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCoredotnet add package Microsoft.EntityFrameworkCore.SqlServer


Ejemplo de registro de usuario (controlador Account):

public class AccountController : Controller{    private readonly UserManager<IdentityUser> _userManager;    private readonly SignInManager<IdentityUser> _signInManager;

public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager) { _userManager = userManager; _signInManager = signInManager; }

[HttpPost] public async Task<IActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new IdentityUser { UserName = model.Email, Email = model.Email }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction("Index", "Home"); } foreach (var error in result.Errors) ModelState.AddModelError(string.Empty, error.Description); } return View(model); }}


3. JWT (JSON Web Tokens) — autenticación sin estado

Para las SPA modernas (React, Angular) o aplicaciones móviles, a menudo se utiliza JWT. El token es firmado por el servidor y contiene claims (declaraciones) sobre el usuario. El servidor no almacena sesiones, lo que simplifica la escalabilidad.



Configuración en Program.cs:

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"],            ValidateLifetime = true,            IssuerSigningKey = new SymmetricSecurityKey(                Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))        };    });


Generación de token:

public string GenerateToken(IdentityUser user){    var claims = new[]    {        new Claim(ClaimTypes.NameIdentifier, user.Id),        new Claim(ClaimTypes.Email, user.Email),        new Claim(ClaimTypes.Role, "User")    };

var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

va

Recommendations