Implementación de autenticación con JWT en ASP.NET Core

Implementación de autenticación con JWT en ASP.NET Core

Introducción: En este tutorial, aprenderás a implementar autenticación basada en tokens JWT (JSON Web Tokens) en una aplicación ASP.NET Core 8. Utilizaremos la versión más reciente de .NET para garantizar que estemos aprovechando las últimas características y mejoras de seguridad.

Paso 1: Crear un nuevo proyecto ASP.NET Core 8

Primero, crearemos un nuevo proyecto ASP.NET Core 8 utilizando el CLI de .NET. Abre tu terminal y ejecuta el siguiente comando:

dotnet new webapi -n JwtAuthenticationDemo

Esto creará un nuevo proyecto web API llamado JwtAuthenticationDemo.

Paso 2: Instalar paquetes necesarios

A continuación, necesitamos instalar los paquetes necesarios para la autenticación JWT. Ejecuta los siguientes comandos en tu terminal:

cd JwtAuthenticationDemo
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

Esto instalará el paquete Microsoft.AspNetCore.Authentication.JwtBearer que necesitamos para la autenticación JWT en nuestro proyecto.

Paso 3: Configurar la autenticación JWT

Abre el archivo Program.cs y agrega el siguiente código en el método ConfigureServices:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = Configuration["Jwt:Issuer"],
            ValidAudience = Configuration["Jwt:Issuer"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
        };
    });

Asegúrate de reemplazar Configuration["Jwt:Issuer"], Configuration["Jwt:Key"] con tus propias configuraciones de JWT.

Paso 4: Añadir autorización a los endpoints

En el mismo archivo Startup.cs, en el método Configure, añade el siguiente código para habilitar la autenticación en la aplicación:

app.UseAuthentication();
app.UseAuthorization();

Paso 5: Generar tokens JWT

Ahora, vamos a crear un controlador para generar tokens JWT. Crea un nuevo controlador llamado AuthController.cs y agrega el siguiente código:

[Route("api/[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
    private IConfiguration _config;

    public AuthController(IConfiguration config)
    {
        _config = config;
    }

    [HttpPost]
    [Route("login")]
    public IActionResult Login(string username, string password)
    {
        // Aquí deberías validar las credenciales del usuario
        // Si las credenciales son válidas, genera y retorna un token JWT

        var tokenString = GenerateJWTToken();
        return Ok(new { token = tokenString });
    }

    private string GenerateJWTToken()
    {
        var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
        var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

        var token = new JwtSecurityToken(
            _config["Jwt:Issuer"],
            _config["Jwt:Issuer"],
            null,
            expires: DateTime.Now.AddMinutes(120),
            signingCredentials: credentials);

        return new JwtSecurityTokenHandler().WriteToken(token);
    }
}

Este controlador tiene un método Login que simula la autenticación de usuario y genera un token JWT válido.

Paso 6: Probar la autenticación JWT

Ahora que hemos configurado la autenticación JWT, puedes probarla enviando una solicitud POST a /api/auth/login con credenciales válidas. Deberías recibir un token JWT en la respuesta si la autenticación fue exitosa.

¡Y eso es todo! Has implementado con éxito la autenticación basada en tokens JWT en tu aplicación ASP.NET Core 8. Puedes integrar este sistema de autenticación en tus controladores y endpoints para proteger tus recursos y mejorar la seguridad de tu aplicación.

Te puede interesar...

Deja un comentario