如何验证请求来自网站?

How to authenticate that a request came from a website?

我和一个朋友正在构建一个带有 Web 前端的 API。 Web 利用 API 通过 Ajax 请求与后端交互。我们想为不使用该网站的人提供对 API 的有限访问权限(您必须付费才能使用 API),但对网站上的任何人都提供完全无限制的访问权限。

现在的问题是:我们正在努力确定哪个 API 调用来自哪里。由于该网站使用 JavaScript 进行调用,因此该请求似乎来自用户的 IP。我们考虑过为每个调用使用唯一令牌或对调用进行签名,但是 JavaScript 会暴露在这两种情况下使用的方法和密钥。

我们强调安全性,因此我们正在寻找可靠的解决方案。

提前致谢!

我们最终在 PHP 中编写的登录中解决了中间件问题。它生成一个额外的令牌,有效期为 24 小时,并将其存储在缓存中。从该网站发出的所有请求都使用此令牌,因此如果它不存在,则该请求不是来自该网站。

缺点是理论上您可以通过从缓存中获取令牌并在其他地方使用它来伪造请求,但这需要每天手动更新令牌。