如何确保只有特定域可以从您的 REST api 查询?

新手上路,请多包涵

我有一个具有 REST api 的应用程序。我想要它,以便可以对 REST api 发出的唯一请求是来自应用程序本身的请求。我怎样才能做到这一点?我也在使用 node.js+express 服务器。

编辑:该应用程序完全是一个公共网络应用程序。

原文由 omega 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 362
1 个回答

只需在您的请求中定义标头,这样做的目的是,它只允许来自某个域的请求,并立即拒绝任何其他域。

 response.set('Access-Control-Allow-Origin', 'domain.tld');

编辑:如果你真的热衷于反对网络抓取的东西,你可以制作一个功能来仔细检查客户的来源。

 function checkOrigin (origin) {
   if (origin === "your.domain.tld") {
     return true;
   } else {
     return false;
   }
}
/* Handling it in response */
if (checkOrigin(response.headers.origin)) {
  // Let client get the thing from API
} else {
  response.write("Send them error that they're not allowed to use the API");
  response.end();
}

上面的例子应该适用于默认的 HTTP/HTTPS 模块,如果我没记错的话,也应该适用于 Express。

编辑 2:为了支持我的说法,它也适用于 Express,我在他们的文档中找到了这个引用;

req(请求)和 res(响应)是 Node 提供的完全相同的对象,因此您可以调用 req.pipe()、req.on(‘data’, callback) 以及在不涉及 Express 的情况下执行的任何其他操作。

原文由 Cernodile 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题