Flujo de Autenticación Web
Resumen
Section titled “Resumen”El login web sigue siendo dual: Zauru autentica al usuario y BoostAPI valida la pertenencia real, roles, permisos y entidad activa del CRM.
Desde esta fase, la sesión Zauru es backend-owned. Web ya no resuelve
graphql.json, ya no construye graphql_jwt/graphql_url, y solo consume:
POST /api/auth/loginconzauru_sessionen la respuesta;GET /api/auth/zauru-sessioncomo snapshot oficial;POST /api/auth/zauru-session/synccomoforce reconcileserver-side;DELETE /api/auth/zauru-sessionpara limpieza explícita.
La sesión Zauru sigue siendo separada de la sesión general del CRM:
- no guarda el JWT crudo de GraphQL en la [REDACTED] web;
- no invalida por sí sola toda la sesión del CRM;
- sí gobierna módulos como
Facturas,Pagos, catálogos y futuros slices Zauru-backed.
- Usuario entra a
/login. - Web redirige al proveedor OAuth.
- Zauru devuelve
code. - Web consulta
GET {AUTH_ZAURU}/api/userinfocon esecode. - Web extrae desde Zauru:
emailapi_keyselected_entity
- Web valida contra BoostAPI con
POST {BOOST_API_BASE_URL}/api/auth/login. - Si ambos pasos son exitosos, crea sesión dual con:
grantIdsschemaVersioncapabilitiesaccessContextpermissionssolo como fallback transicionalboostUserIdroleNameboostRoleIdemployeeRoleIduserRoleIdroleSourceboostEmployeeIdzauruEmployeeIdboostEntityIdclientKind = "web"zauruSessionsi BoostAPI ya pudo reconciliarla en login
- Web obtiene o reutiliza
GET /api/permissions/schema. - Web trata
GET /api/permissions/mecomo fuente principal para grants y refresco. - Web navega a
/auth/zauru-session/finish. - Si
session.zauruSession.statusllegaready|expiring_soon, la pantalla intermedia redirige de inmediato al destino final. - Si llega
missing|expired|entity_mismatch, la pantalla intermedia llama:
POST /api/auth/zauru-session/sync
- Web lee el snapshot oficial:
GET /api/auth/zauru-session
- Solo si el snapshot queda
readyoexpiring_soon, entra a la app.
Regla de responsabilidades
Section titled “Regla de responsabilidades”Monorepo web
Section titled “Monorepo web”- hace login;
- usa
GET /api/permissions/schemapara labels y agrupaciones; - usa
GET /api/permissions/mepara grants efectivos y capacidades; - persiste
zauru_sessiondevuelto por BoostAPI; - usa
GET /api/auth/zauru-sessioncomo snapshot operativo; - dispara
POST /api/auth/zauru-session/synccuando necesita forzar reconcile; - decide cuándo reintentar o bloquear UX, sin ejecutar GraphQL ni
graphql.json.
BoostAPI
Section titled “BoostAPI”- valida pertenencia, identidad y entidad;
- resuelve server-side
/profile.jsony/apps/graphql.json; - persiste la sesión Zauru por
user + entity + client_kind; - decide el acceso real a módulos Zauru-backed;
- usa la sesión guardada como fuente de verdad runtime.
Contrato operativo de sesión Zauru
Section titled “Contrato operativo de sesión Zauru”Endpoints consumidos por web:
POST /api/auth/zauru-session/syncGET /api/auth/zauru-sessionDELETE /api/auth/zauru-session
Snapshot operativo esperado:
statusentity_idclient_kindselected_entity_idselected_entity_nameselected_entity_logozauru_user_idzauru_employee_idgraphql_jwt_expires_atrefresh_afterchecked_atsynced_at
Reglas:
- el JWT GraphQL de Zauru vive solo server-side en BoostAPI;
- web solo guarda metadata normalizada de estado;
- web ya no resuelve
graphql.jsonni envíagraphql_jwt/graphql_url; 401/428/409en módulos Zauru-backed activan reconciliación controlada;- SSR debe degradar con estado controlado, no destruir la sesión global del CRM.
Variables mínimas de web
Section titled “Variables mínimas de web”Happy path oficial:
APP_RUNTIME_MODE(dev|preview|prod)AUTH_ZAURUCLIENT_IDREDIRECT_URLBOOST_API_BASE_URLSESSION_SECRET
Valores operativos:
dev:AUTH_ZAURU=https://zauru-oauth-staging.herokuapp.compreview:AUTH_ZAURU=https://zauru-oauth-staging.herokuapp.com(o base OAuth Heroku de pruebas) +APP_RUNTIME_MODE=previewprod:AUTH_ZAURUdebe apuntar a la base OAuth productiva aprobada
Nota de runtime:
previewdebe comportarse como prod-like en web ([REDACTED]s seguras, sin fallback de permisos dev), aunque use endpoints de prueba.
Nota:
- aunque en staging el login visible pueda verse como
https://zauru-oauth-staging.herokuapp.com/login, en.envguardamos la base del proveedor porque web construye/dialog/authorize,/api/userinfoy/logouta partir deAUTH_ZAURU.
Puntos críticos
Section titled “Puntos críticos”redirect_uridebe coincidir exactamente con la configuración del proveedor.SESSION_SECRETdebe tener longitud/entropía adecuada.BOOST_API_BASE_URLdebe apuntar al backend BoostAPI operativo.- La sesión Zauru es una capacidad por módulo, no el criterio de validez total del CRM.
- El flujo web real ya no entra directo a
/dashboard; debe pasar porauth/zauru-session/finish. - Web ya no resuelve ni ejecuta GraphQL de Zauru; solo consume snapshots/reconcile de BoostAPI.
- Si falla solo la sesión Zauru, la UI debe permitir
retryo realineación sin destruir automáticamente la sesión Boost. [REDACTED]no debe guardar schema ni árboles de permisos.
