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
244 lines
6.7 KiB
Markdown
244 lines
6.7 KiB
Markdown
# AUTH - REFERENCE IMPLEMENTATION
|
|
|
|
**Versión:** 1.0.0 | **Fecha:** 2025-12-12 | **Nivel:** Catalog (3)
|
|
|
|
---
|
|
|
|
## ÍNDICE DE ARCHIVOS
|
|
|
|
| Archivo | Descripción | LOC | Patrón Principal |
|
|
|---------|-------------|-----|------------------|
|
|
| `auth.service.reference.ts` | Servicio completo de autenticación JWT | 230 | Register, Login, Refresh, Logout |
|
|
| `jwt-auth.guard.reference.ts` | Guard para proteger rutas con JWT | ~60 | Passport JWT Guard |
|
|
| `jwt.strategy.reference.ts` | Estrategia Passport para validación JWT | ~70 | Passport Strategy |
|
|
| `roles.guard.reference.ts` | Guard para control de acceso basado en roles | ~65 | RBAC (Role-Based Access Control) |
|
|
|
|
---
|
|
|
|
## CÓMO USAR
|
|
|
|
### Flujo de adopción recomendado
|
|
|
|
```yaml
|
|
PASO_1: Identificar necesidades
|
|
- ¿Necesitas autenticación completa? → auth.service.reference.ts
|
|
- ¿Solo proteger rutas? → jwt-auth.guard.reference.ts
|
|
- ¿Control por roles? → roles.guard.reference.ts + jwt.strategy.reference.ts
|
|
|
|
PASO_2: Copiar archivos base
|
|
- Copiar archivos necesarios a tu módulo de auth
|
|
- Renombrar eliminando ".reference"
|
|
|
|
PASO_3: Adaptar imports
|
|
- Ajustar rutas de entidades (User, Profile, UserSession)
|
|
- Ajustar DTOs según tu esquema
|
|
- Configurar conexión a BD correcta (@InjectRepository)
|
|
|
|
PASO_4: Configurar variables de entorno
|
|
- JWT_SECRET
|
|
- JWT_EXPIRES_IN (default: 15m)
|
|
- REFRESH_TOKEN_EXPIRES (default: 7d)
|
|
- BCRYPT_COST (default: 10)
|
|
|
|
PASO_5: Implementar entidades requeridas
|
|
- User: id, email, encrypted_password, role
|
|
- Profile: id, user_id, email, ...
|
|
- UserSession: id, user_id, refresh_token, expires_at, is_revoked
|
|
|
|
PASO_6: Validar integración
|
|
- npm run build
|
|
- npm run lint
|
|
- Pruebas de endpoints: /auth/register, /auth/login, /auth/refresh
|
|
```
|
|
|
|
---
|
|
|
|
## PATRONES IMPLEMENTADOS
|
|
|
|
### 1. Autenticación JWT (auth.service.reference.ts)
|
|
|
|
**Características:**
|
|
- Registro con email único
|
|
- Password hasheado con bcrypt (cost 10)
|
|
- Access token (15m) + Refresh token (7d)
|
|
- Gestión de sesiones con revocación
|
|
- Refresh token hasheado (SHA-256) en BD
|
|
|
|
**Endpoints típicos:**
|
|
```typescript
|
|
POST /auth/register → { accessToken, refreshToken, user }
|
|
POST /auth/login → { accessToken, refreshToken, user }
|
|
POST /auth/refresh → { accessToken, refreshToken, user }
|
|
POST /auth/logout → { message: 'Logout successful' }
|
|
```
|
|
|
|
### 2. Guards de protección
|
|
|
|
**jwt-auth.guard.reference.ts:**
|
|
```typescript
|
|
// Uso en controladores
|
|
@UseGuards(JwtAuthGuard)
|
|
@Get('profile')
|
|
getProfile(@Request() req) {
|
|
return req.user; // Usuario del token JWT
|
|
}
|
|
```
|
|
|
|
**roles.guard.reference.ts:**
|
|
```typescript
|
|
// Control de acceso por roles
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles('admin', 'moderator')
|
|
@Delete('users/:id')
|
|
deleteUser(@Param('id') id: string) {
|
|
// Solo admin y moderator pueden ejecutar
|
|
}
|
|
```
|
|
|
|
### 3. Estrategia JWT (jwt.strategy.reference.ts)
|
|
|
|
**Funcionalidad:**
|
|
- Valida tokens en cada request
|
|
- Extrae payload del token
|
|
- Inyecta `req.user` con datos del usuario
|
|
|
|
---
|
|
|
|
## NOTAS DE ADAPTACIÓN
|
|
|
|
### Variables a reemplazar
|
|
|
|
```typescript
|
|
// EN auth.service.reference.ts
|
|
User → Tu entidad de usuario
|
|
Profile → Tu entidad de perfil (opcional)
|
|
UserSession → Tu entidad de sesiones
|
|
RegisterUserDto → Tu DTO de registro
|
|
|
|
// EN jwt.strategy.reference.ts
|
|
JWT_SECRET → process.env.JWT_SECRET
|
|
userRepository → Tu repositorio/servicio de usuarios
|
|
|
|
// EN roles.guard.reference.ts
|
|
@Roles() → Tu decorador custom (crear si no existe)
|
|
```
|
|
|
|
### Dependencias requeridas
|
|
|
|
```bash
|
|
npm install --save @nestjs/jwt @nestjs/passport passport passport-jwt bcrypt
|
|
npm install --save-dev @types/passport-jwt @types/bcrypt
|
|
```
|
|
|
|
### Esquema de base de datos
|
|
|
|
```sql
|
|
-- Tabla users (adaptar según tu schema)
|
|
CREATE TABLE users (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
email VARCHAR(255) UNIQUE NOT NULL,
|
|
encrypted_password VARCHAR(255) NOT NULL,
|
|
role VARCHAR(50) DEFAULT 'user',
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
|
|
-- Tabla user_sessions
|
|
CREATE TABLE user_sessions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
|
|
refresh_token VARCHAR(64) NOT NULL, -- SHA-256 hash (64 chars)
|
|
expires_at TIMESTAMP NOT NULL,
|
|
is_revoked BOOLEAN DEFAULT FALSE,
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_user_sessions_refresh_token ON user_sessions(refresh_token);
|
|
```
|
|
|
|
---
|
|
|
|
## CASOS DE USO COMUNES
|
|
|
|
### 1. Integrar autenticación en proyecto nuevo
|
|
|
|
```typescript
|
|
// 1. Copiar auth.service.reference.ts → auth.service.ts
|
|
// 2. Copiar guards y strategy
|
|
// 3. Configurar en auth.module.ts:
|
|
|
|
@Module({
|
|
imports: [
|
|
TypeOrmModule.forFeature([User, Profile, UserSession], 'auth'),
|
|
JwtModule.register({
|
|
secret: process.env.JWT_SECRET,
|
|
signOptions: { expiresIn: '15m' },
|
|
}),
|
|
PassportModule,
|
|
],
|
|
providers: [AuthService, JwtStrategy, RolesGuard],
|
|
controllers: [AuthController],
|
|
exports: [AuthService],
|
|
})
|
|
export class AuthModule {}
|
|
```
|
|
|
|
### 2. Migrar de autenticación básica a JWT
|
|
|
|
```typescript
|
|
// Antes: session-based
|
|
@UseGuards(SessionGuard)
|
|
|
|
// Después: JWT-based
|
|
@UseGuards(JwtAuthGuard)
|
|
```
|
|
|
|
### 3. Agregar roles a usuarios existentes
|
|
|
|
```typescript
|
|
// 1. Migrar BD: ALTER TABLE users ADD COLUMN role VARCHAR(50) DEFAULT 'user';
|
|
// 2. Implementar RolesGuard (roles.guard.reference.ts)
|
|
// 3. Usar decorador @Roles() en rutas protegidas
|
|
```
|
|
|
|
---
|
|
|
|
## CHECKLIST DE VALIDACIÓN
|
|
|
|
Antes de marcar como completo:
|
|
|
|
- [ ] Build pasa: `npm run build`
|
|
- [ ] Lint pasa: `npm run lint`
|
|
- [ ] Registro funciona: POST /auth/register
|
|
- [ ] Login funciona: POST /auth/login
|
|
- [ ] Refresh funciona: POST /auth/refresh
|
|
- [ ] Guards protegen rutas correctamente
|
|
- [ ] Tokens expiran según configuración
|
|
- [ ] Logout revoca sesión en BD
|
|
- [ ] Roles bloquean acceso no autorizado
|
|
|
|
---
|
|
|
|
## REFERENCIAS CRUZADAS
|
|
|
|
### Dependencias en @CATALOG
|
|
|
|
- **session-management**: Para gestión avanzada de sesiones multi-dispositivo
|
|
- **multi-tenancy**: Si necesitas autenticación por tenant
|
|
- **rate-limiting**: Proteger endpoints de auth contra brute-force
|
|
|
|
### Relacionado con SIMCO
|
|
|
|
- **@OP_BACKEND**: Operaciones de backend (crear service, guards)
|
|
- **@SIMCO-REUTILIZAR**: Este catálogo es candidato para reutilización
|
|
- **@SIMCO-VALIDAR**: Validar implementación antes de deploy
|
|
|
|
### Documentación adicional
|
|
|
|
- NestJS Auth: https://docs.nestjs.com/security/authentication
|
|
- Passport JWT: http://www.passportjs.org/packages/passport-jwt/
|
|
- bcrypt: https://github.com/kelektiv/node.bcrypt.js
|
|
|
|
---
|
|
|
|
**Mantenido por:** Core Team | **Origen:** gamilit/apps/backend/src/modules/auth/
|