- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经在网上浏览了一段时间,但无法理解仅在前端和后端之间制作私有(private) API 的概念。我本质上想要做的是拥有一个只能通过前端访问的 API,而不能通过 curl、postman 或其他任何方式访问。
我有以下设置:
应用程序托管在 Heroku 上,后端在 nodejs 中
我使用通过 let's encrypt 工具自行生成的 https 连接。
我有一个返回字符串“Hello world”的公共(public) API atm
目前,您可以通过前端或访问 www.example.com/api/test 来访问它,但我想做的是不允许用户手动访问链接或使用 curl或 postman 来获取它,但只能通过前端访问它。
前端是用 Angular 2 编写的(如果重要的话)
请注意,我不打算让任何用户登录该网站,我只是想限制对外部世界的 API 访问,以便只有我的前端才能获得它。
更新用例
future 的用例很简单。我有一个基本的注册表单,要求提供电子邮件地址和文字说明。然后我在后端使用 nodemailer 使用来自 Angular 2 的 POST 请求将该信息发送到 gmail。我访问通过 req.on('data') 和 req.on('end') 发送的数据并处理它。我担心的是如何确保我不会通过该 API 收到垃圾邮件并收到 10k 封电子邮件,因此我希望以某种方式使 API 只能通过前端访问。
最佳答案
虽然您无法阻止 REST 服务被整个互联网调用,但您仍然可以阻止垃圾邮件:无论您的服务是否需要身份验证,它始终是相同的机制,使用验证码(最重要的部分)并限制 API 的速率。
确保客户端向服务器发出请求的最佳方式是验证码。
CAPTCHA :
A CAPTCHA (a backronym for "Completely Automated Public Turing test to tell Computers and Humans Apart") is a type of challenge-response test used in computing to determine whether or not the user is human.
您可以找到大量可以创建验证码的服务或库,例如 Google 的 reCAPTCHA .
对于公共(public)服务,您可以通过 IP 限制访问速率:如果同一 IP 发出 10、100 甚至 1000 个请求(取决于该服务的目的),这有点可疑,因此您可以通过发送错误状态并将这种不公平行为记录到应用程序日志中来拒绝为他服务。因此,系统管理员可以使用 fail2ban 等工具在防火墙级别禁止 IP。
对于经过身份验证的服务,除了您可能还想根据 IP 和其身份对 API 进行速率限制外,这都是一样的,并且可能不想禁止经过身份验证的用户...
请注意,对于公共(public) API,您并不是真的必须自己处理速率限制,这意味着防止同一 IP 在 10 秒内向同一网址发出 1000 次 POST 请求是系统管理员可以而且应该做的事情。
关于node.js - 如何创建只能被前端访问的私有(private)api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42948743/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!