Introducción a OAuth 2.0 y JWT en C#
Las aplicaciones web y las API modernas requieren un sistema de autorización robusto. Los dos estándares más populares — OAuth 2.0 (protocolo de delegación de acceso) y JWT (JSON Web Token, formato de token) — se han convertido en la base de la seguridad en el ecosistema .NET. En este artículo, analizaremos cómo implementar la autorización OAuth 2.0 y JWT en C# en ASP.NET Core, crearemos un ejemplo de servidor de autorización y protegeremos una API.
Independientemente de si está creando una aplicación monolítica o una arquitectura de microservicios, comprender estos mecanismos es críticamente importante. OAuth 2.0 define los roles (cliente, servidor de autorización, servidor de recursos), mientras que JWT sirve como una forma compacta y autosuficiente de transmitir datos del usuario.
Fundamentos de OAuth 2.0: flujos y roles
¿Qué es OAuth 2.0?
OAuth 2.0 es un protocolo de autorización que permite a aplicaciones de terceros obtener acceso limitado a los recursos de un usuario sin compartir sus credenciales. En lugar de un nombre de usuario y contraseña, se utilizan tokens de acceso (access tokens).
Roles principales en OAuth 2.0
- Resource Owner — el usuario propietario de los datos.
- Client — la aplicación que solicita el acceso.
- Authorization Server — el servidor que emite los tokens después de la autenticación.
- Resource Server — la API que protege los recursos y verifica los tokens.
Flujos populares (grant types)
- Authorization Code — para aplicaciones de servidor (el más seguro).
- Client Credentials — para comunicación entre servidores (sin usuario).
- Implicit — obsoleto, no recomendado.
- Refresh Token — para obtener un nuevo access token sin volver a introducir la contraseña.
JWT (JSON Web Token): estructura y principio de funcionamiento
¿De qué se compone un JWT?
Un JWT es una cadena que consta de tres partes separadas por puntos:
header.payload.signature- Header — el tipo de token y el algoritmo de firma (por ejemplo, HS256 o RS256).
- Payload — los datos (claims): identificador de usuario, roles, fecha de expiración, etc.
- Signature — la firma que verifica que el token no ha sido alterado.
Ventajas de JWT para C#
- Autosuficiencia — todos los datos del usuario están dentro del token.
- Verificación sencilla en el lado del servidor de recursos sin necesidad de consultar la base de datos.
- Soporte en .NET a través de la librería
Microsoft.AspNetCore.Authentication.JwtBearer.
Implementación de OAuth 2.0 + JWT en C# en ASP.NET Core
1. Configuración del servidor de autorización (emisión de JWT)
Crearemos un servidor mínimo que acepte usuario/contraseña y devuelva un JWT. Para simplificar, usaremos una clave simétrica (HS256).
// Program.cs — servidor de autorizaciónusing Microsoft.AspNetCore.Authentication.JwtBearer;using Microsoft.IdentityModel.Tokens;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;
var builder = WebApplication.CreateBuilder(args);builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "MyAuthServer", ValidAudience = "MyApiClient", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretKey123!@#$%")) }; });
builder.Services.AddAuthorization();var app = builder.Build();
app.MapPost(
```