Skip to main content

ADR 0003: Autenticación y Autorización con JWT y ASP.NET Core Identity

  • Fecha: 2025-07-16
  • Estado: [Aceptada]

Contexto

Existe la necesidad de implementar un sistema para manejar la autenticación y autorización de forma segura, escalable y que cumpla con el principio de sin estado de la arquitectura REST. Esto incluye la gestión de usuarios (registro, login, y perfiles), la protección de los endpoints de la API, y la diferenciación de permisos de usuarios según los roles existentes.

Decisión

Decidimos implementar un sistema de autenticación y autorización basado en la combinación de JSON Web Tokens (JWT) para la autenticación de API y ASP.NET Core Identity para la gestión de usuarios, roles y la lógica de autorización.

Alternativas Consideradas

  • Implementación de un sistema de usuarios/roles desde cero: Descartado por complejidad, tiempo, seguridad - ASP.NET Core Identity ya lo hace de forma robusta.
  • Otro Identity Provider (ej. Auth0, Okta): Descartado por sobre-complicación para un proyecto de portafolio, costo, o por querer demostrar implementación propia.
  • Autenticación basada en Sesiones/Cookies: Descartado para APIs RESTful por ser con estado, menos escalable para múltiples servicios, problemas de CORS con SPAs.
  • OAuth 2.0 (completo flow): Descartado por ser más complejo de implementar para el alcance inicial, aunque JWT puede ser parte de OAuth.

Consecuencias

Positivas (+)

  • ASP.NET Core Identity proporciona un sistema probado y seguro para la gestión de credenciales y usuarios, mientras que JWT protege las comunicaciones.
  • JWTs son sin estado, lo que facilita la escalabilidad horizontal de la API al no requerir sesiones en el servidor.
  • Identity maneja la identidad del usuario y JWT la autenticación de la petición.
  • JWT es un estándar que puede ser consumido fácilmente por diversas plataformas (frontend React, aplicaciones móviles, otros servicios).
  • Ambas soluciones se integran muy bien con el ecosistema de ASP.NET Core.
  • ASP.NET Core Identity permite implementar autorización basada en roles o políticas de forma efectiva.

Negativas (-)

  • Configurar y entender JWT y ASP.NET Core Identity a fondo puede tener una curva de aprendizaje inicial.
  • Por ser sin estado, la revocación de tokens antes de su expiración requiere soluciones adicionales (listas negras, tokens de refresco).
  • ASP.NET Core Identity requiere una base de datos para almacenar usuarios y roles.
  • La configuración de ambos sistemas y la coordinación de su interacción puede ser más compleja que soluciones más simples.