Introducción: ¿por qué se necesitan OAuth 2.0 y JWT en las aplicaciones modernas?
\nEn el desarrollo web moderno, la seguridad de los datos y la gestión de accesos pasan a primer plano. Cada día, millones de usuarios inician sesión en aplicaciones a través de Google, Facebook o sistemas corporativos, sin transmitir sus contraseñas directamente. Aquí es donde entran en juego los protocolos OAuth 2.0 y la tecnología JWT (JSON Web Tokens).
\nOAuth 2.0 es el estándar de la industria para la delegación de acceso. Permite que las aplicaciones obtengan acceso limitado a los recursos del usuario sin revelar sus credenciales. JWT, por su parte, es un formato de token compacto y autónomo que contiene toda la información necesaria para la verificación de autenticidad y autorización.
\nEn este artículo, analizaremos en la práctica cómo implementar la autorización OAuth 2.0 y JWT en C# usando ASP.NET Core. Aprenderá a configurar un servidor de autorización, generar tokens y proteger sus endpoints de API. Todos los ejemplos de código están listos para usar en proyectos reales.
\n\n1. Configuración del servidor de autorización con IdentityServer4
\nPara implementar OAuth 2.0, utilizaremos la popular biblioteca IdentityServer4, un framework para ASP.NET Core que implementa los protocolos OpenID Connect y OAuth 2.0. Comenzaremos creando un servidor de autorización mínimo.
\n\nPaso 1: Instalación de paquetes y creación del proyecto
\nCree un nuevo proyecto de ASP.NET Core Web Application (plantilla vacía) e instale los paquetes NuGet necesarios:
\ndotnet add package IdentityServer4\ndotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\n\nPaso 2: Configuración de clientes y recursos
\nDefina usuarios de prueba, clientes y recursos protegidos. Cree la clase Config.cs:
public static class Config\n{\n public static IEnumerable<IdentityResource> IdentityResources =>\n new[] { new IdentityResources.OpenId(), new IdentityResources.Profile() };\n\n public static IEnumerable<ApiScope> ApiScopes =>\n new[] { new ApiScope("api1", "My API") };\n\n public static IEnumerable<Client> Clients =>\n new[]\n {\n new Client\n {\n ClientId = "client",\n AllowedGrantTypes = GrantTypes.ClientCredentials,\n ClientSecrets = { new Secret("secret".Sha256()) },\n AllowedScopes = { "api1" }\n }\n };\n}\n\nPaso 3: Registro de servicios en Startup.cs
\nConfigure IdentityServer en el método ConfigureServices:
public void ConfigureServices(IServiceCollection services)\n{\n services.AddIdentityServer()\n .AddInMemoryIdentityResources(Config.IdentityResources)\n .AddInMemoryApiScopes(Config.ApiScopes)\n .AddInMemoryClients(Config.Clients)\n .AddTestUsers(TestUsers.Users);\n\n services.AddAuthentication()\n .AddJwtBearer("Bearer", options =>\n {\n options.Authority = "https://localhost:5001";\n options.TokenValidationParameters = new TokenValidationParameters\n {\n ValidateAudience = false\n };\n });\n}\nEn el método Configure, agregue la llamada app.UseIdentityServer().
2. Implementación de tokens JWT: generación y validación
\nEl token JWT consta de tres partes: encabezado (header), carga útil (payload) y firma (signature). En .NET, la generación y verificación de JWT se realiza mediante mecanismos integrados.
\n\nGeneración manual de un token JWT
\nA veces es necesario crear un token manualmente, por ejemplo, para pruebas. Use el siguiente código:
\nusing System.IdentityModel.Tokens.Jwt;\nusing Microsoft.IdentityModel.Tokens;\nusing System.Security.Claims;\nusing System.Text;\n\npublic string GenerateJwtToken(string userI