我一直在浏览网页一段时间,但无法理解只在前端和后端之间制作私有API的概念。我本来想要做的是拥有一个只能通过前端访问的API,而不是通过卷曲,邮递员或其他任何东西。
我有以下设置:
App托管在Heroku上,后端位于nodejs
我使用https连接,我是通过加密工具自行生成的。
我有一个公共API atm,它返回一个字符串' Hello world'
目前,您可以通过前端或访问www.example.com/api/test来访问它,但我想要做的是不允许用户手动访问链接或使用curl或邮递员,但只能通过前端访问。
前端是用Angular 2编写的(如果有意义的话)
请注意,我不打算让任何用户登录网站,我只是想限制对外界的API访问,以便只有我的前端才能获得它。
更新使用案例
未来的用例很简单。我有一个基本的注册表单,要求提供电子邮件地址和文本说明。然后我使用后端的nodemailer使用来自Angular 2的POST请求将该信息发送到gmail。我访问通过req.on(' data')和req.on发送的数据(' end& #39;)并处理它。我担心的是如何确保我不会通过该API发送垃圾邮件并收到10k电子邮件,因此我希望以某种方式使API只能通过前端访问。
答案 0 :(得分:2)
虽然您无法阻止整个互联网调用REST服务,但您仍然可以阻止垃圾邮件: 您的服务是否需要身份验证,它始终采用相同的机制,使用验证码(最重要的部分)并对您的API进行速率限制。
确保向服务器发出请求的客户端是由人类驱动的最佳方法是验证码。
CAPTCHA:
CAPTCHA(&#34;完全自动化的公共图灵测试,用于告诉计算机和人类公司&#34;)是一种挑战 - 响应测试,用于计算以确定用户是否是人。< / p>
您可以找到许多服务或图书馆来创建验证码,例如Google reCAPTCHA。
对于公共服务,您可以通过IP限制访问:如果相同的IP发出10,100甚至1000个请求(取决于该服务的目的),这有点可疑,所以你可以通过发送错误状态拒绝为他服务,并将不公平的行为记录到应用程序日志中。因此,sysadmin可以使用fail2ban等工具在防火墙级别禁用IP。
对于经过身份验证的服务,除非您可能还希望根据IP 和对API进行速率限制,否则相同它的身份,可能不想禁止经过身份验证的用户......
请注意,对于公共API,您实际上并非 自行处理速率限制,这意味着阻止相同的IP对10中的相同网址发出1000 POST请求秒是可以而且应该由系统管理员完成的事情。