Servicio SSO central (auth.handev.org): emite JWTs, publica JWKS, gestiona usuarios, servicios y derechos de acceso.
Desafío
La plataforma necesitaba un hub central de autenticación: inicio de sesión único en todos los servicios, rotación de claves, refresh correcto desde pestañas en segundo plano, control de acceso por servicio y panel de administración.
Lo que hicimos
- Backend en Fastify + Drizzle con verificación de tokens propia, bcrypt para contraseñas.
- Forma del claim JWT: iss, sub, exp, iat, email, name, isAdmin, globalRole, services. Firmas RS256, claves rotadas, JWKS en /.well-known/jwks.json.
- 15 min de access + 30 días de refresh como cookies HttpOnly en .handev.org con SameSite=lax.
- Triple refresh: retry /auth/refresh en 401, tick cada 12 minutos, refresh en visibilitychange.
- Páginas de admin: /admin/users, /admin/services, /admin/access (matriz usuario × servicio).
- GitLab OAuth para vincular cuentas corporativas de GitLab con usuarios de Identity.
Resultado
- Login único para 3 servicios; agregar un nuevo servicio requiere solo unas pocas inserciones SQL.
- SSO listo para producción con manejo correcto de refresh y 401.
- Separación clara de rol global y rol interno de servicio.