保护我的API仅适用于我的前端

Ami*_*n F 9 authentication api tokenize node.js reactjs

我正在建立一个节点/快速后端.我想创建一个只能与我的reactjs前端(私有API)一起使用的API.

想象一下,如果这是一个电子商务网站,我的用户将浏览产品,然后选择购买什么,并在订购时可能会或可能不会登录.

确保我的API仅适用于reactjs前端的最佳做法是什么?

当用户决定登录或者他们仍然是客人时会发生什么?

The*_*ist 6

这个用例很有趣,我认为这对许多电子商务网站来说都是一个问题。我正在开发的产品实际上已经试图在移动领域处理此类事情的公司进行了一些对话。用户登录可用于告诉您谁在使用 API,但如果您不想强迫人们拥有用户名/登录名,则必须搜索替代解决方案。您似乎想要一种识别哪些软件正在尝试使用您的 API 的方法。

通常可以使用几种简单的方法来解决此问题:

嵌入式秘密

您可以向应用程序添加密钥,并要求对 API 的任何访问都使用该密钥来标识自身。人们会告诉你不要这样做,因为提取密钥真的很容易。这是事实,但对于所有安全性,都需要进行成本/效益分析,以评估您想要投入多少工作来保护您的 API。javascript 的问题在于,混淆或隐藏秘密并不那么容易,因为所有源代码都在那里。

如果您正在考虑一个有其他语言选择选项的环境,那么您可以采取更多措施来混淆应用程序中的秘密(例如在 android 中使用 NDK)。不过 JavaScript 很难。

使用 API 密钥时要记住的重要一点是,您不应该以明文形式传输它。这样偷窃确实很容易。相反,您可以使用密钥对 API 流量进行签名,以便服务器可以验证请求是否来自具有密钥并知道如何对其进行签名的内容。

速率限制

虽然这实际上并不是问题的解决方案,但根据您想要实现的目标,这是一种选择。如果您担心来自其他应用程序的大量请求,您可以将速率限制到高于正版应用程序的水平,并且如果传入的请求过多,您可以通过 IP 地址进一步阻止或速率限制。


And*_*yco 5

Apply CORS-服务器指定允许请求您的API的域。

它是如何工作的?

  1. 客户端向服务器发送特殊的“预检”请求(OPTIONS方法的请求),询问域请求是否来自允许的域中。它还询问请求方法是否正确(您可以允许GET,但拒绝POST,...)。
  2. 服务器确定是允许还是拒绝请求。它以“确定”响应进行响应,并设置特殊的标头,以告知允许使用哪些域/请求方法。
  3. 如果允许客户端查询您的API,它会执行预期的请求,或纾困...

确实尊重CORS(浏览器确实如此)的客户端将能够(或者如果拒绝则不会)能够连接。如果客户端忽略CORS(REST客户端,CLI工具等),则无论如何,它都可以连接...

不过,仍需要签名的请求(授权)

  • CORS 是一项浏览器策略。它不会像原始帖子所要求的那样保护服务器端端点 (8认同)