PrototipoPythonHackatón · 2025

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.

Flujo de datos
  1. POST /auth/login: valida al usuario en PostgreSQL (contraseñas con bcrypt) y emite un token de acceso y uno de refresco
  2. GET /inventario con el token: el gateway valida el JWT y carga al usuario
  3. Consulta la API externa con httpx asíncrono
  4. Filtra la respuesta por el campo dueno_de_activo; los superusuarios reciben todo
  5. 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 type y 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.

¿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.

Otros proyectos