La intranet ya conoce al usuario por su sesión local.
Arquitectura
Cómo viaja la identidad
Hace una petición con la cookie de sesión.
Usa el correo autenticado y el secreto privado.
Comprueba firma, origen, vigencia y uso único.
El backend lo obtiene de request.user o request.session. El portal central confirma después que corresponda a un empleado activo.
Implementación
Archivos que deben existir
colombia-intranet/
├── server/
│ ├── portal-embed.js
│ └── routes/
│ └── employee-portal-route.js
├── src/
│ ├── components/
│ │ ├── ProwinchEmployeePortal.jsx
│ │ └── ProwinchEmployeePortal.css
│ └── pages/
│ └── EmployeePortalPage.jsx
└── .env
portal-embed.js
Crea el ticket HMAC SHA-256 para el tenant colombia.
employee-portal-route.js
Obtiene el empleado de la sesión y devuelve la URL temporal.
ProwinchEmployeePortal.jsx
Solicita la URL y la asigna al iframe sin conocer el secreto.
Configuración
Variables de entorno
PROWINCH_PORTAL_URL=https://prowinch.us/intranet
PROWINCH_PORTAL_SHARED_SECRET=SECRETO_DE_64_CARACTERES
PROWINCH_PORTAL_PARENT_ORIGIN=https://DOMINIO_COLOMBIA
PORTAL_EMBED_ENABLED=true
PORTAL_EMBED_COLOMBIA_SECRET=EL_MISMO_SECRETO
PORTAL_EMBED_COLOMBIA_ORIGINS=https://DOMINIO_COLOMBIA
PORTAL_EMBED_COLOMBIA_RECEIVABLES_URL=
No crear variables VITE_*, REACT_APP_* o NEXT_PUBLIC_* con el secreto. Esos valores quedan incluidos en el JavaScript público del navegador.
Backend Colombia
Obtener el usuario autenticado
La ruta debe ejecutarse después de los middleware de sesión y autenticación. Nunca debe aceptar el correo desde query strings o formularios.
function currentEmployee(request) {
const source = request.user ?? request.session?.employee ?? {};
return {
email: source.email ?? request.session?.glocodusu,
name: source.name ?? source.displayName ?? request.session?.glonomusu,
legacyUserId:
source.legacyUserId ?? source.id ?? request.session?.glocodusuario,
showReceivables: source.canViewReceivables === true,
};
}
app.use(sessionMiddleware);
app.use(authenticationMiddleware);
app.use(employeePortalRouter);
Frontend React
Mostrar el iframe
React solicita una URL nueva al montar. credentials: 'include' envía la cookie de sesión al backend colombiano.
import ProwinchEmployeePortal
from '../components/ProwinchEmployeePortal.jsx';
export default function EmployeePortalPage() {
return <ProwinchEmployeePortal />;
}
Contenido servido desde prowinch.us
Seguridad
Cómo se comparte el secreto
Firma HEADER.PAYLOAD.
Recalcula y compara la firma.
Entrega