Alcampo - Brand Portal
Arquitectura de Referencia
SSO, Token Handler Pattern, Backend For Frontend y topologias de despliegue agnosticas.
Quarkus 3
React SPA
Java 21
Salesforce IdP
OAuth2
01
Contexto
El Problema
Un portal web para proveedores de Alcampo que necesita autenticar usuarios contra Salesforce (IdP corporativo) sin exponer tokens OAuth2 al navegador.
Tokens Sensibles
Los JWT de Salesforce contienen privilegios de acceso a datos comerciales. Exponerlos al JavaScript del navegador es un vector de ataque XSS critico.
Multi-Entorno
La solucion debe funcionar en GCP, Kubernetes on-premise o servidores legacy sin modificar una sola linea de codigo de negocio.
Rendimiento
El proxy de tokens debe resolverse en milisegundos. Un monolito Spring Boot con Cold Start de 8s no es viable en Serverless.
02
Patron
Token Handler Pattern
La solucion aplica el Token Handler Pattern mediante un Backend For Frontend (BFF) que actua como mediador central.
- La SPA nunca recibe tokens -- opera exclusivamente con una cookie HttpOnly opaca.
- El BFF custodia los tokens cifrados en un Session Store seguro (Redis, Firestore o RDBMS).
- Cada peticion API pasa por el BFF, que inyecta el Bearer token server-to-server.
- Cookie configurada con Secure, SameSite=Lax y expiracion controlada por TTL.
Flujo Simplificado
1. Browser → /bff/login
2. BFF → 302 → Salesforce /authorize
3. User autentica en Salesforce
4. Callback → BFF recibe code
5. BFF intercambia code → Token Bundle
6. Tokens cifrados → Session Store
7. BFF → Set-Cookie: session_id → SPA
03
Secuencia
SSO Handshake -- Authorization Code Grant
El navegador sin sesion activa dispara automaticamente el flujo OAuth2 contra Salesforce.
Clic para ampliar
04
Secuencia
Resolucion de Peticiones -- Token Exchange
Cada llamada API del SPA se traduce a una peticion autenticada server-to-server.
Clic para ampliar
05
Stack Tecnologico
Quarkus + React
Backend -- Quarkus 3 (Java 21)
- Arranque <50ms en modo nativo (GraalVM). Cold Start eliminado.
- Huella <100 MB RAM -- 10x menor que Spring Boot.
- JAX-RS nativo para el 95% del trafico proxy.
- Apache Camel reservado para agregaciones complejas (5%).
- Session Store abstraido: Firestore en GCP, PostgreSQL on-premise.
Quarkus 3.x
JAX-RS
GraalVM
Camel (EIPs)
Frontend -- React SPA
- Compilacion estatica pura: HTML, CSS, JS minificado.
- El servidor host solo sirve
index.html -- sin NodeJS ni JDK.
withCredentials: true en cada fetch() hacia el BFF.
- CORS estricto: Access-Control-Allow-Origin exacto (nunca
*).
- Desplegable en CDN, Nginx on-premise o un simple bucket.
React
TypeScript
Vite
Client-Side
06
Arquitectura
Flujo Interno del BFF
El 95% del trafico es proxy directo. Apache Camel interviene solo en agregaciones multi-API.
Clic para ampliar
07
Despliegue
Nucleo Agnostico
El mismo codigo fuente se materializa en 4 topologias distintas. Cambiar de Serverless a Bare Metal no es un proyecto de desarrollo -- es una mutacion de CI/CD.
1 - PaaS
Google Cloud Run
Serverless 100% gestionado. Cloud Armor WAF, VPC Service Controls, Cloud NAT con IP estable y autorizada en la whitelist de Salesforce.
2 - CaaS
GKE + Cloud SQL
Kubernetes gestionado con Workload Identity, Network Policies deny-by-default y persistencia delegada a Managed Postgres.
3 - Private Cloud
Kubernetes On-Premise
Orquestacion en CPD propio. Forward Proxy interno como pasarela egress con IP publica autorizada.
4 - Legacy
Bare Metal / Tiers
Segregacion clasica Web Tier + App Tier + DB Tier. Quarkus Fat JAR desplegado en servidores de aplicaciones existentes.
08
Topologia 1 - PaaS -- Google Cloud Run
Serverless con VPC Service Controls
Clic para ampliar
09
Topologia 2 - CaaS -- GKE + Cloud SQL
Kubernetes Gestionado con Persistencia Hibrida
Clic para ampliar
10
Topologia 3 - Private Cloud -- Kubernetes On-Premise
Contenedores en CPD Propio
Clic para ampliar
11
Topologia 4 - Legacy -- Bare Metal / Tiers
Infraestructura Heredada
Clic para ampliar
Fin
Un codigo.
Cuatro topologias.
La logica de cifrado de tokens permanece identica en cualquier perimetro. Cambiar de topologia es una mutacion de CI/CD, no un proyecto de desarrollo.
Quarkus 3
React SPA
Token Handler
BFF
Cloud Agnostic