OAuth 2.0 y autorización JWT en C#: guía práctica

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: ¿por qué se necesitan OAuth 2.0 y JWT en las aplicaciones modernas?

\n

En 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).

\n

OAuth 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.

\n

En 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\n

1. Configuración del servidor de autorización con IdentityServer4

\n

Para 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\n

Paso 1: Instalación de paquetes y creación del proyecto

\n

Cree un nuevo proyecto de ASP.NET Core Web Application (plantilla vacía) e instale los paquetes NuGet necesarios:

\n
dotnet add package IdentityServer4\ndotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
\n\n

Paso 2: Configuración de clientes y recursos

\n

Defina usuarios de prueba, clientes y recursos protegidos. Cree la clase Config.cs:

\n
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\n

Paso 3: Registro de servicios en Startup.cs

\n

Configure IdentityServer en el método ConfigureServices:

\n
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}
\n

En el método Configure, agregue la llamada app.UseIdentityServer().

\n\n

2. Implementación de tokens JWT: generación y validación

\n

El 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\n

Generación manual de un token JWT

\n

A veces es necesario crear un token manualmente, por ejemplo, para pruebas. Use el siguiente código:

\n
using System.IdentityModel.Tokens.Jwt;\nusing Microsoft.IdentityModel.Tokens;\nusing System.Security.Claims;\nusing System.Text;\n\npublic string GenerateJwtToken(string userI                

Blogs

Book Recommendations