如何创build只能由前端访问的私人API?

我一直在网上查找一段时间,但不能理解只在前端和后端之间创build私有API的概念。 我基本上想要做的是有一个API只能通过前端访问,而不是通过卷发,邮递员或其他任何东西。

我有以下设置:

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

  2. 我使用通过我们自己生成的https连接来encryption工具。

  3. 我有一个公共的API atm,返回一个string'Hello world'

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

  5. 前端是写在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理员。