Autenticacion¶
MDU usa su propio sistema de autenticacion basado en JWT con dos metodos de login: Email OTP y Google OAuth.
Vision General¶
- Token de acceso: JWT de corta duracion (HMAC-SHA256)
- Token de refresco: JWT de larga duracion para renovacion
- Almacenamiento: claves
localStoragemdu_access_token,mdu_refresh_token,mdu_user - Header:
Authorization: Bearer <access_token>
Endpoints¶
| Metodo | Ruta | Auth | Descripcion |
|---|---|---|---|
| POST | /api/auth/send-otp |
- | Enviar OTP de 6 digitos al email |
| POST | /api/auth/verify-otp |
- | Verificar OTP, devolver JWT |
| GET | /api/auth/google |
- | Redireccion Google OAuth |
| GET | /api/auth/google/callback |
- | Callback Google OAuth |
| POST | /api/auth/refresh |
- | Refrescar token de acceso |
| POST | /api/auth/logout |
Requerido | Invalidar token de refresco |
Flujo OTP por Email¶
1. Enviar OTP¶
Respuesta:
Reglas:
- Codigo numerico de 6 digitos
- Expira en 10 minutos
- Maximo 3 envios por 10 minutos por email
2. Verificar OTP¶
POST /api/auth/verify-otp
Content-Type: application/json
{ "email": "usuario@ejemplo.com", "code": "123456" }
Respuesta:
{
"access_token": "eyJhbGci...",
"refresh_token": "eyJhbGci...",
"user": { "id": "uuid", "email": "usuario@ejemplo.com", "name": "Usuario" }
}
Flujo Google OAuth¶
1. Redirigir a Google¶
Redirige al usuario a la pantalla de consentimiento OAuth de Google. El parametro opcional redirect define donde volver despues de la autenticacion.
2. Callback¶
Google redirige de vuelta a /api/auth/google/callback con un codigo de autorizacion. El servidor lo intercambia por informacion del usuario, crea/actualiza el perfil, genera tokens JWT y redirige al frontend con tokens en el hash de la URL.
Refresco de Token¶
Respuesta:
Payload JWT¶
Warning
El ID del usuario esta en payload.sub, NO en payload.userId. Todo el middleware extrae req.userId = payload.sub.
Integracion Frontend¶
// authService.ts
const token = localStorage.getItem('mdu_access_token');
// Llamadas API
const response = await fetch('/api/generate-model', {
headers: { 'Authorization': `Bearer ${token}` }
});
// Refresco de token en 401
if (response.status === 401) {
const newToken = await refreshToken();
// Reintentar peticion con nuevo token
}
El helper getValidToken() en authService.ts gestiona la verificacion de expiracion JWT y el refresco automatico.
Logout¶
Limpia el token de refresco en el servidor. El frontend limpia localStorage y despacha el CustomEvent mdu:auth:logout.