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): 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.JwtBearer


Configuració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

Recommendations