OAuth 2.0 y autorización JWT en C#: guía paso a paso para principiantes

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

Introducción a OAuth 2.0 y JWT en C#

\n

Las aplicaciones web modernas requieren mecanismos de seguridad robustos. Dos protocolos clave — OAuth 2.0 y JWT (JSON Web Token) — se han convertido en el estándar de facto para implementar autorización y autenticación. En este artículo, analizaremos cómo utilizar estas tecnologías en el ecosistema C# (.NET).

\n

OAuth 2.0 es un protocolo de acceso delegado que permite a las aplicaciones obtener acceso limitado a los recursos del usuario sin transferir sus credenciales. JWT, por su parte, es un formato de token compacto y autónomo que se utiliza a menudo para transmitir información de autenticación entre el cliente y el servidor.

\n

En esta guía, crearemos una API web simple en ASP.NET Core que implementa OAuth 2.0 utilizando tokens JWT. Aprenderá cómo configurar la generación, validación y protección de endpoints.

\n\n

¿Qué son OAuth 2.0 y JWT?

\n

Antes de pasar al código, analicemos los conceptos principales.

\n

OAuth 2.0

\n

OAuth 2.0 define cuatro roles:

\n
    \n
  • Resource Owner (propietario del recurso) — generalmente el usuario.
  • \n
  • Client (cliente) — la aplicación que desea obtener acceso.
  • \n
  • Authorization Server (servidor de autorización) — emite los tokens.
  • \n
  • Resource Server (servidor de recursos) — proporciona datos protegidos.
  • \n
\n

El flujo principal Authorization Code Grant incluye: redirigir al usuario al servidor de autorización, obtener un código, intercambiar el código por un token de acceso.

\n\n

JWT (JSON Web Token)

\n

JWT consta de tres partes separadas por puntos:

\n
    \n
  • Header — tipo de token y algoritmo de firma (por ejemplo, HS256).
  • \n
  • Payload — datos (claims), como ID de usuario, rol, fecha de expiración.
  • \n
  • Signature — firma creada con una clave secreta.
  • \n
\n

Ejemplo de JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

\n\n

Configuración del proyecto ASP.NET Core

\n

Crearemos un nuevo proyecto de API web con soporte de autenticación.

\n
dotnet new webapi -n OAuthJwtDemo\ncd OAuthJwtDemo
\n

Agreguemos los paquetes NuGet necesarios:

\n
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\ndotnet add package System.IdentityModel.Tokens.Jwt
\n\n

Configuración en appsettings.json

\n

Agregue una sección para la configuración JWT en el archivo appsettings.json:

\n
{\n  "JwtSettings": {\n    "SecretKey": "YOUR_SUPER_SECRET_KEY_AT_LEAST_32_CHARS",\n    "Issuer": "OAuthJwtDemo",\n    "Audience": "OAuthJwtDemoClient",\n    "ExpirationMinutes": 60\n  }\n}
\n

Importante: En un proyecto real, almacene la clave secreta en User Secrets o Azure Key Vault.

\n\n

Implementación del servicio de generación de JWT

\n

Crearemos una interfaz y su implementación para trabajar con tokens.

\n

Interfaz IJwtService

\n
public interface IJwtService\n{\n    string GenerateToken(string userId, string role);\n    ClaimsPrincipal ValidateToken(string token);\n}
\n\n

Implementación de JwtService

\n
public class JwtService : IJwtService\n{\n    private readonly JwtSettings _settings;\n\n    public JwtService(IOptions<JwtSettings> settings)\n    {\n        _settings = settings.Value;\n    }\n\n    public string GenerateToken(string userId, string role)\n    {\n        var claims = new[]\n        {\n            new Claim(ClaimTypes.NameIdentifier, userId),\n            new Claim(ClaimTypes.Role, role),\n            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())\n        };\n\n        var key = new Symmetric                

Blogs

Book Recommendations