gpt4 book ai didi

node.js - 如何创建只能被前端访问的私有(private)api?

转载 作者:太空狗 更新时间:2023-10-29 18:31:32 25 4
gpt4 key购买 nike

我已经在网上浏览了一段时间,但无法理解仅在前端和后端之间制作私有(private) API 的概念。我本质上想要做的是拥有一个只能通过前端访问的 API,而不能通过 curl、postman 或其他任何方式访问。

我有以下设置:

  1. 应用程序托管在 Heroku 上,后端在 nodejs 中

  2. 我使用通过 let's encrypt 工具自行生成的 https 连接。

  3. 我有一个返回字符串“Hello world”的公共(public) API atm

  4. 目前,您可以通过前端或访问 www.example.com/api/test 来访问它,但我想做的是不允许用户手动访问链接或使用 curl或 postman 来获取它,但只能通过前端访问它。

  5. 前端是用 Angular 2 编写的(如果重要的话)

请注意,我不打算让任何用户登录该网站,我只是想限制对外部世界的 API 访问,以便只有我的前端才能获得它。

更新用例

future 的用例很简单。我有一个基本的注册表单,要求提供电子邮件地址和文字说明。然后我在后端使用 nodemailer 使用来自 Angular 2 的 POST 请求将该信息发送到 gmail。我访问通过 req.on('data') 和 req.on('end') 发送的数据并处理它。我担心的是如何确保我不会通过该 API 收到垃圾邮件并收到 10k 封电子邮件,因此我希望以某种方式使 API 只能通过前端访问。

最佳答案

虽然您无法阻止 REST 服务被整个互联网调用,但您仍然可以阻止垃圾邮件:无论您的服务是否需要身份验证,它始终是相同的机制,使用验证码(最重要的部分)并限制 API 的速率。

1。验证码:

确保客户端向服务器发出请求的最佳方式是验证码。

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 .

2。速率限制:

  • 对于公共(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com