如何允许特定服务器访问我的API?

2023-12-20

我正在使用node.js、express和mongodb编写一个API,它将在另一台服务器中使用。我只希望该服务器(或将来的更多服务器)能够访问我的 API。我怎样才能做到这一点?


如果您只想根据另一台服务器的 IP 进行限制,那么您可以定义一个快速中间件来检查每个传入请求,如果 IP 不正确,则返回错误。

一个例子可能如下所示:

var app = express();
app.use(function (req, res, next) {
  if (req.ip !== '1.2.3.4') { // Wrong IP address
    res.status(401);
    return res.send('Permission denied');
  }
  next(); // correct IP address, continue middleware chain
});

如果您的 API 位于一个或多个代理(或负载均衡器)后面,您可能应该启用“信任代理”选项(http://expressjs.com/guide/behind-proxies.html http://expressjs.com/guide/behind-proxies.html).

该中间件将根据您的请求,根据传入请求的 IP 地址限制对您的 API 的访问。

然而,这相当脆弱,因为如果移动服务器会发生什么?您现在需要更新 API 应用程序以接受不同的 IP 地址。

我强烈鼓励您对 API 使用某种形式的身份验证(预共享密钥),而不是基于 IP 的过滤。您可以使用Passport http://passportjs.org/使用 Express 为您的 API 添加各种身份验证方案。

最后,无论哪种情况,如果您确实关心 API 的安全性,您可能应该确保您的 API 受到 TLS/SSL 加密的保护。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何允许特定服务器访问我的API? 的相关文章

随机推荐

  • -bash: ./deploy.sh: 权限被拒绝,错误:脚本返回退出代码 126

    我正在尝试使用 Jenkins 实现持续部署 这涉及到将 jar 文件发送到远程服务器 并在远程服务器上启动该 jar 文件 问题是我不断收到访问被拒绝错误 并且我已经尝试了远程和本地服务器上的每个帐户似乎都不起作用 我犯了同样的错误 詹金
  • 为什么选择选择更改多个提交?

    我这里有 2 个分支 即分支 1 和分支 2 分支1增加了很多新功能 分支2也很稳定 今天 我只想将分支 1 中的 1 个功能合并到分支 2 中 所以 我只是跑git cherry pick
  • Drupal 7 - 如何从模块加载模板文件?

    我正在尝试在 Drupal 7 中构建自己的模块 所以我创建了一个名为 moon 的简单模块 function moon menu items array items moon array title gt description gt t
  • LINQ to Entities 在 DateTime.DayOfWeek 上加入

    想象两个表 班次 RANK S DAY Shifts 包含一个 ShiftDate 列 它是DateTime并且 RANK S DAY 有一个DayOfWeek柱子 我需要加入 int ShiftDate DayOfWeek equals
  • toUpperCase() 没有使字符串大写

    我不知道我做错了什么 但不知何故 toUpperCase 字符串函数在我的浏览器上不起作用 或者我弄错了什么 var string kjsdgfiIJHBVSFIU string toUpperCase console log string
  • Android - mediarecorder 的最大 maxfilesize 是多少?

    Android 对于 Android 媒体记录器 setMaxFileSize 可以设置的最大文件大小是多少 我知道它在 4147483650 和 5147483650 之间 为什么首先要有限制 我正在录制到 SDCARD 在运行之前检测卡
  • 使用 spring 在 Ibm Websphere MQ 中实现重试逻辑

    我正在使用 Spring 和 Websphere MQ 进行以下消息传递配置 我需要实现一个场景的重试逻辑 其中我从队列接收消息并将消息数据放到弹性搜索服务器 搜索服务器是非事务性的 如果搜索服务器关闭 我必须回滚消息再次放入队列并在一段时
  • 如何在Rails中管理3个多对多模型

    我正在跟进铁路广播公司 http railscasts com episodes 47 two many to many制作不同模型进行维护的建议many to many关系 但是 我在提取传递关系数据时遇到问题 假设有 3 个多对多模型
  • Android 2.2 - 如何检测我是否安装在 SDCard 上?

    我正在编写一个存储大量媒体文件的 Android 应用程序 它们不是那种会弄乱用户通知或其他媒体目录的类型 而且数量太多 但它们也必须是用户可更新的 所以我不能将它们放入资源中 我可以使用 getExternalFilesDir 获取 SD
  • DLL-导出模板基类的静态成员

    在 DLL 中 我有一个带有模板基类的导出非模板类 该模板基类有一个静态成员变量 我在链接到具有导出的非模板类的 DLL 的可执行文件中使用静态基成员 在许多情况下 我会收到未解决的外部符号或有关不一致链接的投诉 我发现了一种可行的方案 但
  • TDD、DDD 和封装

    经过几年遵循我工作场所 架构师 传下来的不良实践并认为一定有更好的方法之后 我最近一直在阅读有关 TDD 和 DDD 的内容 我认为这些原则和实践将是一个很好的方法 非常适合我们编写的软件的复杂性 然而 我见过的许多 TDD 示例都调用域对
  • Flutter:应用程序的区域设置不受其所有本地化代表的支持

    您好 我正在尝试在 flutter 应用程序中添加 BottomNavigationBar 但当我运行项目时出现错误 A MaterialLocalizations delegate that supports the ka GE loca
  • 将应用程序设置存储在项目文件夹而不是 AppData 中

    我的项目中有一个 Settings cs 文件 我通过以下方式从程序访问其中的数据 Properties Settings Default MyProperty 生成的设置文件存储在以下位置 C Users Foo AppData Loca
  • android ndk 开发问题:memcpy 函数出现“无效参数”错误

    我在android项目中使用了c 代码 所以我使用了NDK工具 IDE是eclipse 编译项目时 我收到错误memcpy功能 Invalid arguments Candidates are void memcpy void const
  • DropDownList-项目在回发时为空

    我有 DropDownList 我必须将其填充到与另一个控件的单击事件关联的事件中 数据已填充并存在 但当我选择一个值并回发时 该值为空 这意味着视图状态不起作用 解决方案说在 Init 中填充 DropDown 但我不能 因为要求不允许这
  • 在 Laravel 4 中设置自动增量初始值

    有没有办法使用 Schema Builder 的迁移来设置 Laravel 4 中表上主键的自动增量初始值 我想将表的 id 设置为从 100 开始 我知道使用纯 SQL 可以做到这一点ALTER TABLE MY TABLE AUTO I
  • 如何使用第一个逗号将字符串拆分为段落?

    我有字符串 address 10 Madison Avenue New York NY 212 538 1884 像这样分割它的最好方法是什么 p 10 Madison Avenue p p New York NY 212 538 1884
  • Apache Maven 错误:无法将工件 org.apache.maven.plugins:maven-clean-plugin:pom: 2.5 传输到中央

    我对此很陌生 我正在 apache maven 上工作 我在代理服务器后面工作 每次 我都会尝试构建maven项目 它给了我这个错误 我还更改了 settings xml 文件中的代理设置 但它不起作用 它一直给我同样的问题 构建失败 我在
  • 如何修复缺少对象的 git 存储库?

    我的开发存储库在某个时候丢失了一个对象 git fsck fatal failed to read object 2dddc84156fa30e4614a7ea5a1895885011b8db8 Invalid argument git c
  • 如何允许特定服务器访问我的API?

    我正在使用node js express和mongodb编写一个API 它将在另一台服务器中使用 我只希望该服务器 或将来的更多服务器 能够访问我的 API 我怎样才能做到这一点 如果您只想根据另一台服务器的 IP 进行限制 那么您可以定义