Sistema de reset de contraseñas automatizado. La idea es simple: un usuario queda bloqueado en algún sistema externo, Locksky verifica su identidad y le avisa al sistema para que ejecute el reset. Sin tocar contraseñas, sin almacenar nada sensible en claro.
Antes de arrancar, hay que registrar a dónde Locksky tiene que avisar cuando se valida un reset. Eso es un webhook: una URL del sistema externo que va a recibir la notificación.
POST /api/webhooks
Authorization: Bearer <token>
{
"name": "Mi sistema",
"url": "https://mi-sistema.com/locksky/reset",
"secret": "clave-para-verificar-la-firma"
}
Con esa secret, Locksky firma cada request con HMAC-SHA256. El sistema externo puede verificar que el llamado es legítimo antes de ejecutar cualquier cosa.
Cuando alguien necesita recuperar el acceso, se hace una solicitud con su email. Locksky genera un OTP de 6 dígitos y se lo manda por mail. El OTP expira en 10 minutos.
POST /api/reset/request
{
"email": "usuario@empresa.com"
}
Respuesta: { "resetRequestId": "..." }
El usuario ingresa el OTP que recibió. Si es correcto y no expiró, Locksky genera un token temporal cifrado con AES-256-GCM y lo dispara al webhook registrado. El sistema externo recibe el token, verifica la firma y ejecuta el reset.
POST /api/reset/validate
{
"resetRequestId": "...",
"otp": "123456"
}
Si todo salió bien, el usuario recibe un mail de confirmación.
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
POST |
/api/auth/login |
— | Login, devuelve JWT |
POST |
/api/reset/request |
— | Solicita un reset, manda OTP por mail |
POST |
/api/reset/validate |
— | Valida el OTP y dispara el webhook |
GET |
/api/webhooks |
JWT | Lista los endpoints activos |
POST |
/api/webhooks |
JWT | Registra un nuevo endpoint |
DELETE |
/api/webhooks/{id} |
JWT | Desactiva un endpoint |
Exponer un endpoint HTTP que:
- Reciba el
POSTde Locksky - Verifique el header
X-Locksky-Signaturecontra el body usando la secret configurada - Use el token recibido para ejecutar el reset en su sistema
Locksky no sabe cómo cada sistema resetea contraseñas. Eso es problema del sistema externo.
# clonar y pararse en la raíz
cd Locksky
# configurar la base y las claves en appsettings.json
# (connection string, JWT key, SMTP, encryption key)
# aplicar migraciones
dotnet ef database update --project src/Locksky.Infrastructure
# correr la API
dotnet run --project src/Locksky.APIDocumentación interactiva disponible en http://localhost:5000/scalar/v1 cuando corre en Development.
.NET 10 · PostgreSQL · Entity Framework Core · MailKit · JWT · AES-256-GCM · HMAC-SHA256