Tengo un problema con mi aplicación Node que usa Express.js, Socket.io y ambos comparten el mismo ID de sesión. Si abro mi sitio web sin iframe o iframe con los mismos orígenes, funciona perfectamente bien (el mismo ID de sesión se comparte entre HTTP y Socket.io). Sin embargo, la ID de sesión compartida entre Express.js y Socket.io no funciona cuando se ejecuta bajo iframe con diferentes orígenes (principal y secundario). No veo la cookie configurada en el navegador Chrome en las herramientas de desarrollo.
Ambos orígenes son sitios web HTTP no seguros (p. ej., de http://ip.ad.dr.ess/ (principal) a http://ip.ad.dr.ess:6175/ (secundario)). Accedo a mi sitio web directamente sin pasar por ningún servidor web porque publico mi backend de nodo con este puerto 6175.
Aquí está el código de muestra:
Configurar sesión express:
const sessionMiddleware = session({ resave: true, saveUninitialized: true, secret: config.session.secretKey, httpOnly: true, // dont let browser javascript access cookie ever ephemeral: true, // delete this cookie while browser close cookie: { maxAge: config.session.maxAge, secure: false, sameSite: "none", path: "/" }, store: new (FileStore(session))({ logFn: logger.info, reapInterval: config.session.reapInterval, }) }); app.use(sessionMiddleware);Configure middleware adicional para Express.js:
app.use(cors()); app.options('*', cors()); app.use(helmet({ frameguard: false })); app.use(compression()); app.use(bodyParser.json()); app.use(cookieParser());Configure Socket.io con el paquete de sesión expresa:
this.io = new Server(server, { cors: { origin: '*', methods: ["GET", "POST", "PUT", "DELETE"], }, }); this.socket.io.use((socket, next) => { sessionMiddleware(socket.handshake, {}, next); });El problema se solucionó en el navegador Chrome pero no en Safari, por lo que es posible que deba trabajar con la URL agregándola con la ID de sesión y obtenerla en el servidor. En el servidor Node, configuré solo maxAge en el objeto de cookie de la sesión rápida y ambos orígenes deben ser un sitio web HTTP seguro para que funcione. Siga este enlace para solucionarlo en el navegador Chrome: https://serverfault.com/questions/1010706/setup-samesite-none-value-in-nginx-webserver