OAuth 2.0 y autorización JWT en C#: 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
```html

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( ```

Blogs

Book Recommendations