Skip to content

IAM (Identity & Access Management)

El módulo IAM es el guardia de seguridad de Yastubo. Gestiona el registro de usuarios, la persistencia de sesiones en Redis y la jerarquía de permisos mediante RBAC.


POST /api/v1/auth/register Público. Crea un usuario base con estado is_verified: False. Todos los usuarios nuevos reciben por defecto el rol de CLIENTE.

POST /api/v1/auth/login Genera un par de tokens (Access & Refresh). La sesión se registra en Redis para permitir la invalidación remota (Logout Global).


Yastubo utiliza una arquitectura de roles granulares. Cada acción en la API está protegida por una validación de permisos específicos.

POST /api/v1/auth/roles/assign

Role: ADMIN

Permite elevar el rango de un usuario o cambiar sus permisos operativos.

{
"user_id": "uuid-del-usuario",
"role_id": "uuid-del-rol"
}
RolNivelPermisos ClaveDescripción
ADMIN100users:manage, plans:write, audit:readControl total del sistema e infraestructura.
VENDEDOR50plans:read, emission:writePuede cotizar y emitir pólizas.
CLIENTE10portal:read, plans:readAcceso a su propio perfil y certificados.

🛠️ Bootstrapping: Inicialización de Permisos

Section titled “🛠️ Bootstrapping: Inicialización de Permisos”

Para que el sistema de permisos funcione correctamente en una base de datos nueva, se debe ejecutar el script de seeding de roles:

Terminal window
uv run python scripts/seed_roles.py

Efecto: Crea los roles ADMIN, VENDEDOR y CLIENTE y les asigna sus permisos técnicos base en la base de datos.


Validación de Contraseñas (Password History)

Section titled “Validación de Contraseñas (Password History)”

El sistema implementa una política de no reutilización de contraseñas.

  • Regla: Un usuario no puede cambiar su contraseña a ninguna de las últimas 5 contraseñas utilizadas anteriormente.
  • Falla: Retorna 400 Bad Request con el mensaje: "New password cannot be one of the last 5 passwords used".

Los tokens de refresco son de un solo uso. Al generar un nuevo access_token mediante /refresh, el refresh_token anterior queda invalidado en la base de datos y en Redis para prevenir ataques de replay.


GET /api/v1/auth/me Retorna el perfil completo del usuario autenticado, incluyendo su lista de roles activos y permisos calculados.