首页 > 解决方案 > 在未经身份验证的情况下使用 SPA 时保护 REST API 的使用

问题描述

在阅读了stackoverflow和其他平台上的所有线程后,我仍然无法找到答案,这让我很满意。

任务:我想创建一个从 REST API 接收数据的单页应用程序 (SPA)。在此 SPA 中,不应使用任何身份验证。这是一个公共网站。但是只有从我的网络服务器加载 SPA 的人才能访问 REST API。

我认为这只能通过服务器端的某些东西(如会话、cookie 等)来解决 - 否则我愿意接受您的建议、解决方案等。

提前谢谢!

标签: restbackend

解决方案


没有相当简单的方法可以做到这一点。您可以轻松地阻止其他域(在浏览器中)访问您域上的 API(通过 CORS),但是阻止脚本执行此操作要困难得多。

问题在于“如何从脚本中检测合法的浏览器流量”。事实证明,这并不容易。您可以尝试尽可能多地检测“异常行为”(例如短时间内的大量请求),但这并不能阻止速度较慢的客户端。

最终,如果人们想要你的数据,他们会想办法绕过你提出的任何限制。您应该重新评估并使用以下选项之一:

  1. 不要做 SPA 和 API。尽管人们可能想知道,如果数据存在于 HTML 中,它仍然可以被抓取。
  2. 添加身份验证。但显然,如果有人可以进行身份​​验证,这对您没有任何帮助。
  3. 重新评估您为何有此限制。你在担心什么?如果您担心人们会获取您的数据并在其他地方使用它,那么在来自 1 个域的浏览器中显示它有什么帮助?如果您担心版权盗窃,为什么不使用法律方法呢?

我见过很多这类问题,但在我看来,我还没有看到一个有正当理由想要这个的问题。但是,也许你是第一个。


推荐阅读