4. Estrategia de Autenticación y Seguridad

Fecha: 2025-12-23 Estado: Aceptado

Contexto

El sistema requiere identificar a los administradores y clientes de forma segura. Se necesita un mecanismo para mantener la sesión del usuario entre peticiones de forma eficiente (stateless vs stateful) y una forma robusta de almacenar credenciales, ya que almacenar contraseñas en texto plano es inaceptable.

Decisiones

1. Mecanismo de Sesión: JWT (JSON Web Tokens)

Se utilizará el esquema de autenticación Bearer Token con JWT.

  • Justificación: Permite que la API sea completamente stateless (sin guardar sesiones en memoria o BD), lo que facilita el escalado horizontal.
  • Implementación: FastAPI gestionará la seguridad de los endpoints mediante HTTPBearer, validando la firma del token en cada petición protegida.

2. Almacenamiento de Contraseñas: Hashing con Argon2

Se utilizará el algoritmo Argon2 (vía librería pwdlib).

  • Justificación: Argon2 es el ganador de la Password Hashing Competition. Es resistente a ataques de fuerza bruta por GPU/ASIC, siendo superior a estándares antiguos como SHA256 o MD5.

3. Librería de Criptografía: PyJWT

Se utilizará PyJWT para la generación (codificación) y validación (decodificación) de los tokens.

Consecuencias

  • Responsabilidad del Cliente: El frontend (o cliente API) debe encargarse de almacenar el token de forma segura y enviarlo en el header Authorization en cada petición.