如何创build只能由前端访问的私人API?
我一直在网上查找一段时间,但不能理解只在前端和后端之间创build私有API的概念。 我基本上想要做的是有一个API只能通过前端访问,而不是通过卷发,邮递员或其他任何东西。
我有以下设置:
-
应用程序在Heroku上托pipe,后端在nodejs中
-
我使用通过我们自己生成的https连接来encryption工具。
-
我有一个公共的API atm,返回一个string'Hello world'
-
目前,您可以通过前端或访问www.example.com/api/test来访问它,但是我想要做的是不允许用户手动访问该链接或使用curl或邮递员来获取该链接而只能通过前端访问。
-
前端是写在Angular 2(如果它是重要的)
请注意,我不打算在网站上有任何用户login,我只是想限制访问API到外部世界,以便只有我的前端才能得到它。
更新使用案例
未来的用例很简单。 我有一个基本的注册forms,要求电子邮件地址和文字说明。 然后,我使用后端的nodemailer,通过使用来自Angular 2的POST请求,将信息发送到gmail。我访问通过req.on('data')和req.on('end')发送的数据并处理它。 我的恐惧是如何确保我不会通过该API获得垃圾邮件,并收到10k电子邮件,因此我希望以某种方式使API只能通过前端访问。
尽pipe无法阻止整个互联网呼叫REST服务,但您仍然可以防止垃圾邮件:您的服务需要身份validation,但始终使用validation码(最重要的部分)和速率限制您的API的机制。
1. CAPTCHA:
确保客户端向服务器发送请求的最好方法是validation码。
CAPTCHA :
validation码(“完全自动公开的图灵testing告诉计算机和人类除外”的一个缩写)是一种在计算中用来确定用户是否是人的挑战 – 响应testing。
你可以find大量的服务,或者创buildvalidation码的库,比如Google的reCAPTCHA 。
2.限速:
-
对于公共服务 ,您可以通过IP进行速率限制访问:如果同一个IP发出10次,100次甚至1000次请求(取决于该服务的用途),这有点可疑,所以您可以拒绝为他服务,通过发送错误状态,并将不公平的行为logging到应用程序日志中。 因此,系统pipe理员可以使用fail2ban等工具禁用防火墙级别的IP。
-
对于经过身份validation的服务 ,除了您可能还想基于IP 和身份对API进行速率限制,并且可能不希望禁止身份validation的用户,也是如此。
请注意,对于公共API,您并不需要自己处理速率限制,这意味着阻止同一个IP在10秒内对同一个url发出1000个POST请求是可以并且应该由系统pipe理员。