React Colombia · Portal central PHP

Integración segura del Portal del Empleado

Guía de implementación para mostrar el portal central dentro de la intranet React de Colombia sin enviar contraseñas ni revelar secretos en el navegador.

Regla principal React nunca recibe el secreto

El backend colombiano firma un ticket de 90 segundos y React recibe únicamente la URL temporal.

01

Arquitectura

Cómo viaja la identidad

1EmpleadoAbre la ruta protegida

La intranet ya conoce al usuario por su sesión local.

2ReactSolicita una URL

Hace una petición con la cookie de sesión.

3Backend ColombiaFirma el ticket

Usa el correo autenticado y el secreto privado.

4Portal PHPValida y abre sesión

Comprueba firma, origen, vigencia y uso único.

El correo tampoco viene de React.

El backend lo obtiene de request.user o request.session. El portal central confirma después que corresponda a un empleado activo.

02

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
Backend

portal-embed.js

Crea el ticket HMAC SHA-256 para el tenant colombia.

Backend

employee-portal-route.js

Obtiene el empleado de la sesión y devuelve la URL temporal.

Frontend

ProwinchEmployeePortal.jsx

Solicita la URL y la asigna al iframe sin conocer el secreto.

03

Configuración

Variables de entorno

Servidor ColombiaBackend Node o Express
PROWINCH_PORTAL_URL=https://prowinch.us/intranet
PROWINCH_PORTAL_SHARED_SECRET=SECRETO_DE_64_CARACTERES
PROWINCH_PORTAL_PARENT_ORIGIN=https://DOMINIO_COLOMBIA
Servidor USAPortal PHP central
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.

04

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.

employee-portal-route.js
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,
  };
}
Montaje de la ruta
app.use(sessionMiddleware);
app.use(authenticationMiddleware);
app.use(employeePortalRouter);
05

Frontend React

Mostrar el iframe

React solicita una URL nueva al montar. credentials: 'include' envía la cookie de sesión al backend colombiano.

EmployeePortalPage.jsx
import ProwinchEmployeePortal
  from '../components/ProwinchEmployeePortal.jsx';

export default function EmployeePortalPage() {
  return <ProwinchEmployeePortal />;
}
intranet-colombia / employee-portal
Employee Portal

Contenido servido desde prowinch.us

06

Seguridad

Cómo se comparte el secreto

Backend ColombiaCopia privada del secreto

Firma HEADER.PAYLOAD.

Viaja por ReactHEADER.PAYLOAD.FIRMAEl secreto no viaja
PHP centralMisma copia del secreto

Recalcula y compara la firma.

07

Entrega

Checklist de implementación

Copiado