API Auth Gateway
La API de inventario de activos de una universidad le devolvía todo el inventario a quien preguntara, y no se podía modificar.
Qué hace: Pone usuarios y permisos delante de esa API: cada persona ve solo los activos que le pertenecen y los superusuarios ven todo, sin tocar la API original.
Repositorio no enlazado temporalmente; el código está disponible a pedido.
Resumen
Proyecto de hackatón. La API de inventario de activos de la universidad ya existía y no tenía usuarios: cualquiera que la consultara recibía el inventario completo.
El gateway se pone delante de ella. Autentica con tokens JWT de acceso y de refresco, consulta la API original y filtra la respuesta por el campo dueno_de_activo, de modo que cada usuario ve solo lo suyo. Está hecho en FastAPI con PostgreSQL, es asíncrono de punta a punta, se desplegó en Railway y reporta los errores a Sentry.
La necesidad
La API de inventario de activos de la universidad ya existía y le devolvía todo a quien preguntara. Había que limitar qué ve cada usuario.
Restricciones
- La API original no se podía modificar: el control de acceso tenía que vivir afuera.
- El plazo de una hackatón.
La solución
Un gateway que exige iniciar sesión, consulta la API original en nombre del usuario y le devuelve solo los activos de los que es dueño. Los superusuarios reciben el inventario completo.
Cómo funciona
El gateway se ubica delante de la API original: autentica, consulta y filtra. Capas separadas en routers, modelos SQLAlchemy 2.0 asíncronos y esquemas Pydantic.
POST /auth/login: valida al usuario en PostgreSQL (contraseñas con bcrypt) y emite un token de acceso y uno de refrescoGET /inventariocon el token: el gateway valida el JWT y carga al usuario- Consulta la API externa con httpx asíncrono
- Filtra la respuesta por el campo
dueno_de_activo; los superusuarios reciben todo - Errores y trazas a Sentry
Decisiones técnicas
- La autorización vive en el gateway porque la API original no se podía tocar.
- Cada token lleva un campo
typey el gateway lo revisa, así un token de refresco no sirve como token de acceso. - Todo es asíncrono (FastAPI, SQLAlchemy async, httpx) para no bloquear el proceso mientras espera a la API externa.
Límites y próximos pasos
- El filtro se aplica después de traer hasta 2.000 activos de la API externa en cada consulta; con más datos habría que filtrar en el origen o cachear.
- Es un proyecto de hackatón: no tiene pruebas automatizadas, solo scripts de verificación manual.
Mi parte
Proyecto de hackatón. Desarrollé el gateway: la autenticación, el filtro por dueño y el despliegue en Railway con Sentry.
Stack
¿Te interesa este tipo de trabajo?
Busco trabajo remoto como Full Stack Engineer. Si quieres hablar de este proyecto o de tu equipo, escríbeme.