Saltar al contenido principal

Arquitectura Keycloak SSO y Gateway

Cómo es hoy

  • Traefik (puertos 80/443, dashboard 8000): edge gateway del compose de Core.
  • Keycloak 24 (8080): IdP OIDC del ecosistema. Realm emite access tokens RS256.
  • Backend canónico: servicio Go (saascol-backend, puerto 3001). Valida tokens consultando el endpoint JWKS de Keycloak (/realms/<realm>/protocol/openid-connect/certs). No usar HMAC con secreto local como autenticación de producción.
  • Frontend: react-oidc-context + inyección del access token en el cliente HTTP hacia /api/v1 (cierre P0).

Flujo objetivo

  1. Usuario autentica en Keycloak (OIDC / Passkeys).
  2. SPA recibe access_token.
  3. Llamadas API: Authorization: Bearer <access_token>.
  4. Go middleware verifica firma JWKS, exp, y claim tenant_id (o mapeo org → tenant).
  5. RLS / filtros de datos usan ese tenant.

Bases de datos

  • PostgreSQL 16 + pgvector, índices HNSW vector_cosine_ops.
  • Migración canónica: backend/migrations/01_core_schema_rls.sql (no el schema Drizzle legacy de backend-ts).

Observabilidad

  • Jaeger está en compose. Export OTel desde el binario Go = parcial (roadmap). No afirmar trazas end-to-end hasta verificar export.

Roadmap (no confundir con “hoy”)

  • ReBAC tipo Zanzibar completo.
  • Cookies HttpOnly / BFF auth sin localStorage.
  • Federaciones SAML corporativas adicionales.