【问题标题】:Secure a Node.js application integrated with a PHP application保护与 PHP 应用程序集成的 Node.js 应用程序
【发布时间】:2026-02-14 10:20:06
【问题描述】:

我有一个现有的第三方 PHP Web 应用程序 (ELGG),我想使用 Node.js 应用程序对其进行扩展。用户在 PHP 应用程序中通过根据 MySQL 数据库检查他们提供的凭据来进行身份验证。

如何在无需在 Node 中重写身份验证代码的情况下保护对 Node.js 应用程序的访问?有没有办法让用户只有在登录 PHP 应用后才能访问 Node.js 应用?

【问题讨论】:

    标签: php node.js security authentication elgg


    【解决方案1】:

    您可以使用数据库或其他共享存储库来存储用户会话 ID,Node 可以检查该 ID 以确保用户已登录。

    【讨论】:

    • 客户端会将会话 ID 存储在 cookie 中,对吗?然后使用该(存储的会话ID)发送请求服务
    【解决方案2】:

    我认为最好的方法是让 PHP 和 Node 应用程序作为同一根域的子域运行,然后让 Node 应用程序检查 PHP 应用程序的身份验证 cookie。这将避免欧文回答中的额外数据库调用。

    一旦用户登录到 PHP 应用程序,就会为 phpapp.mydomain.com (*.mydomain.com) 创建一个带有身份验证令牌的 Cookie。托管在 nodeapp.mydomain.com 上的 Node 应用程序可以访问在 phpapp.mydomain.com 上创建的 cookie 身份验证令牌。

    【讨论】:

      【解决方案3】:

      一般来说,您可以将 Node.js 应用程序设为 Web 服务,使其在本地而非公开可用,然后编写执行身份验证的 PHP 代码,然后调用 Node.js 提供的 API,然后为使用该数据的用户。

      【讨论】:

      • 我正在使用 Node.js 和 socket.io 为用户提供实时交互,所以我不希望 PHP 代码调用 Node,我希望用户的浏览器调用 Node通过套接字,所以 Node.js 应用程序必须是公开的......
      【解决方案4】:

      我写了一个 Elgg 插件,它提供了访问 websocket 的 node.js 服务器的功能。你可以在这里查看代码:elgg-nodejs

      我只是解析cookie来获取会话用户:

      getElggSession = function(socket) {
          return socket.handshake.headers.cookie.match(/Elgg=(\S*);?/)[1];
      };
      

      也许这不是最好的安全方法……

      【讨论】: