workspace-v1/shared/libs/auth/README.md
rckrdmrd 66161b1566 feat: Workspace-v1 complete migration with NEXUS v3.4
Sistema NEXUS v3.4 migrado con:

Estructura principal:
- core/orchestration: Sistema SIMCO + CAPVED (27 directivas, 28 perfiles)
- core/catalog: Catalogo de funcionalidades reutilizables
- shared/knowledge-base: Base de conocimiento compartida
- devtools/scripts: Herramientas de desarrollo
- control-plane/registries: Control de servicios y CI/CD
- orchestration/: Configuracion de orquestacion de agentes

Proyectos incluidos (11):
- gamilit (submodule -> GitHub)
- trading-platform (OrbiquanTIA)
- erp-suite con 5 verticales:
  - erp-core, construccion, vidrio-templado
  - mecanicas-diesel, retail, clinicas
- betting-analytics
- inmobiliaria-analytics
- platform_marketing_content
- pos-micro, erp-basico

Configuracion:
- .gitignore completo para Node.js/Python/Docker
- gamilit como submodule (git@github.com:rckrdmrd/gamilit-workspace.git)
- Sistema de puertos estandarizado (3005-3199)

Generated with NEXUS v3.4 Migration System
EPIC-010: Configuracion Git y Repositorios
2026-01-04 03:37:42 -06:00

284 lines
6.8 KiB
Markdown

# Autenticación y Autorización
**Versión:** 1.0.0
**Origen:** projects/gamilit
**Estado:** Producción
**Última actualización:** 2025-12-08
---
## Descripción
Sistema completo de autenticación y autorización basado en JWT con:
- Registro y login de usuarios
- Tokens de acceso y refresh
- Gestión de sesiones
- Guards y decoradores
- Sistema de roles (RBAC)
- Recuperación de contraseña
- Verificación de email
---
## Características
| Característica | Descripción |
|----------------|-------------|
| JWT Access Tokens | Tokens de corta duración (15min) para autenticación |
| JWT Refresh Tokens | Tokens de larga duración (7d) para renovación |
| Password Hashing | bcrypt con cost 10 |
| Session Management | Sesiones persistentes en BD con metadata |
| Role-Based Access | Sistema RBAC con guards y decoradores |
| Multi-tenant | Soporte para múltiples tenants |
| Security Logging | Registro de intentos de autenticación |
---
## Stack Tecnológico
```yaml
backend:
framework: NestJS
orm: TypeORM
auth_library: "@nestjs/passport"
jwt_library: "@nestjs/jwt"
hashing: bcrypt
validation: class-validator
database:
engine: PostgreSQL
schemas:
- auth (usuarios principales)
- auth_management (perfiles, sesiones, tokens)
```
---
## Dependencias NPM
```json
{
"@nestjs/jwt": "^10.x",
"@nestjs/passport": "^10.x",
"passport": "^0.7.x",
"passport-jwt": "^4.x",
"bcrypt": "^5.x",
"class-validator": "^0.14.x",
"class-transformer": "^0.5.x"
}
```
---
## Tablas Requeridas
| Schema | Tabla | Propósito |
|--------|-------|-----------|
| auth | users | Usuarios del sistema |
| auth_management | profiles | Perfiles extendidos |
| auth_management | tenants | Multi-tenancy |
| auth_management | roles | Definición de roles |
| auth_management | user_roles | Asignación de roles |
| auth_management | user_sessions | Sesiones activas |
| auth_management | auth_attempts | Log de intentos |
| auth_management | password_reset_tokens | Tokens de reset |
| auth_management | email_verification_tokens | Tokens de verificación |
---
## Estructura del Módulo
```
auth/
├── auth.module.ts # Módulo principal
├── controllers/
│ ├── auth.controller.ts # Login, register, refresh
│ ├── password.controller.ts # Reset, change password
│ └── users.controller.ts # Profile, preferences
├── services/
│ ├── auth.service.ts # Lógica de autenticación
│ ├── session-management.service.ts
│ ├── security.service.ts
│ ├── password-recovery.service.ts
│ └── email-verification.service.ts
├── entities/
│ ├── user.entity.ts
│ ├── profile.entity.ts
│ ├── tenant.entity.ts
│ ├── role.entity.ts
│ ├── user-role.entity.ts
│ ├── user-session.entity.ts
│ ├── auth-attempt.entity.ts
│ └── ...
├── dto/
│ ├── login.dto.ts
│ ├── register-user.dto.ts
│ ├── refresh-token.dto.ts
│ ├── change-password.dto.ts
│ └── ...
├── guards/
│ ├── jwt-auth.guard.ts
│ └── roles.guard.ts
├── strategies/
│ └── jwt.strategy.ts
├── decorators/
│ └── roles.decorator.ts
└── __tests__/
├── auth.controller.spec.ts
├── auth.service.spec.ts
└── ...
```
---
## Endpoints Principales
| Método | Ruta | Descripción | Auth |
|--------|------|-------------|------|
| POST | /auth/register | Registro público | No |
| POST | /auth/login | Login con email/password | No |
| POST | /auth/refresh | Renovar access token | Refresh Token |
| POST | /auth/logout | Cerrar sesión | JWT |
| GET | /auth/me | Obtener usuario actual | JWT |
| POST | /auth/change-password | Cambiar contraseña | JWT |
| POST | /auth/request-reset | Solicitar reset password | No |
| POST | /auth/reset-password | Reset con token | Token |
---
## Uso Rápido
### 1. Proteger una ruta con JWT
```typescript
import { Controller, Get, UseGuards, Request } from '@nestjs/common';
import { JwtAuthGuard } from '@/modules/auth/guards';
@Controller('protected')
export class ProtectedController {
@Get()
@UseGuards(JwtAuthGuard)
getProtectedData(@Request() req) {
// req.user contiene el payload del JWT
return { userId: req.user.id, email: req.user.email };
}
}
```
### 2. Proteger por roles
```typescript
import { Controller, Get, UseGuards } from '@nestjs/common';
import { JwtAuthGuard, RolesGuard } from '@/modules/auth/guards';
import { Roles } from '@/modules/auth/decorators';
import { RoleEnum } from '@/shared/constants';
@Controller('admin')
@UseGuards(JwtAuthGuard, RolesGuard)
export class AdminController {
@Get()
@Roles(RoleEnum.ADMIN, RoleEnum.SUPER_ADMIN)
adminOnly() {
return { message: 'Solo para administradores' };
}
}
```
### 3. Configurar el módulo
```typescript
// app.module.ts
import { AuthModule } from '@/modules/auth/auth.module';
@Module({
imports: [
AuthModule,
// ... otros módulos
],
})
export class AppModule {}
```
---
## Variables de Entorno Requeridas
```env
# JWT
JWT_SECRET=your-super-secret-key-change-in-production
JWT_EXPIRES_IN=15m
JWT_REFRESH_EXPIRES_IN=7d
# Base de datos (para TypeORM)
DB_HOST=localhost
DB_PORT=5432
DB_NAME=your_database
DB_USER=your_user
DB_PASSWORD=your_password
```
---
## Flujos de Autenticación
### Login Flow
```
1. Cliente envía email + password
2. AuthService valida credenciales
3. Si válidas:
- Genera access token (15min)
- Genera refresh token (7d)
- Crea sesión en BD
- Registra intento exitoso
4. Retorna tokens + user data
```
### Refresh Flow
```
1. Cliente envía refresh token
2. AuthService verifica token
3. Busca sesión en BD por hash del refresh token
4. Si válida y no expirada:
- Genera nuevos tokens
- Actualiza sesión
5. Retorna nuevos tokens
```
---
## Seguridad
- Passwords hasheados con bcrypt (cost 10)
- Refresh tokens hasheados en BD (SHA256)
- Tokens JWT con expiración corta
- Sesiones con metadata (IP, User-Agent, dispositivo)
- Logging de todos los intentos de auth
- Soft delete para usuarios (no eliminación física)
---
## Adaptaciones Necesarias
Al implementar en un nuevo proyecto, ajustar:
1. **Enum de roles**: Definir roles específicos del proyecto
2. **Schema de BD**: Puede ser diferente a `auth`/`auth_management`
3. **Campos de User entity**: Agregar/quitar según necesidades
4. **Conexión TypeORM**: Ajustar nombre de conexión si no es 'auth'
5. **Variables de entorno**: Configurar JWT_SECRET único
---
## Referencias
- [NestJS Authentication](https://docs.nestjs.com/security/authentication)
- [Passport.js](http://www.passportjs.org/)
- [JWT.io](https://jwt.io/)
---
**Mantenido por:** Sistema NEXUS
**Proyecto origen:** Gamilit Platform