在 react/redux 应用程序(代理)中隐藏 api url

Posted

技术标签:

【中文标题】在 react/redux 应用程序(代理)中隐藏 api url【英文标题】:Hiding api url in react/redux application (proxy) 【发布时间】:2016-10-24 10:36:04 【问题描述】:

我担心我的 react/redux 应用程序的安全性,因为我的 api url 在捆绑的 app.js 文件中向公众公开。我一直在研究这个,一些开发人员以某种方式代理它,即我可以使用api/,而不是使用我的api url,每当我使用axios 或superagent 之类的库执行调用并且它被代理到我的api url,但是这个用户只能在他们身边看到api/

我正在尝试解决这个问题,我假设这是在 express config 中设置的?

【问题讨论】:

我不明白如何隐藏客户端网络流量,除非服务器正在拨打电话,否则可以在浏览器或提琴手会话中检测到任何客户端调用,对吧? 通常的解决方案是在服务器端进行或使用某种身份验证。 【参考方案1】:

你有一个合理的担忧。

通常,您会让您的客户端代码调用 /api,然后在 express(或您使用的任何服务器)中为“/api”创建一个路由,该路由将该请求代理到实际的 api url。

这样您就可以隐藏来自客户端的任何敏感信息。例如身份验证令牌、api 密钥等。

在快递中你可以这样做:

app.use('/api', (req, res) => 
  const method = req.method.toLowerCase();
  const headers = req.headers;
  const url = 'your_actual_api_url';

  // Proxy request
  const proxyRequest = req.pipe(
    request(
      url
      headers,
      method,
    )
  );

  const data = [];
  proxyRequest.on('data', (chunk) => 
    data.push(chunk);
  );

  proxyRequest.on('end', () => 
    const  response  = proxyRequest;
    const buf = Buffer.concat(data).toString();
    res.status(response.statusCode).send(buf);
  );
);

这个例子有点复杂,但它可能对你有用。

【讨论】:

任何人仍然可以破解打开这个文件并得到your_actual_api_url。最重要的是,网络流量将始终对客户端可见。 不正确。此代码将在服务器上执行。所以这段代码在客户端上是不可见的。 啊,我现在知道这是在快递里面。我想我现在对 OPs 问题感到困惑,因为我同意服务器执行的任何远程调用显然都不能通过客户端访问。 OP 的担忧是在使用 Node 和 Webpack 或 Browserify 之类的捆绑器构建客户端应用程序时出现的问题:一切都在客户端代码中结束。包括执行 API 调用的代码。据我了解,OP 希望从该(客户端)代码中隐藏实际的 API url,并且使用代理是一种方法。 嗯,我使用 webpack,但它只从我的入口点吸收代码,而不是 server.js。哦,好吧,谢谢你的澄清。

以上是关于在 react/redux 应用程序(代理)中隐藏 api url的主要内容,如果未能解决你的问题,请参考以下文章

React+router和react+redux使用过程的记录

使用react+redux实现弹出框案例

使用通过 react、redux 和 react-redux 完成的组件以及在 react 应用程序中使用 webpack 构建时出错

react+redux 调服务端接口中,报Fetch API cannot load 怎么解决

react + redux 无限循环

在 React/Redux 应用程序中正确隔离组件,但允许在彼此之间传递回调