首页 > 解决方案 > 使用 API Token 认证的 Laravel 限速 API

问题描述

我正在为我的 Laravel 应用程序的用户构建一个安静的 API 来检索他们的数据。

目前的计划是他们可以在应用程序中生成一个 API 令牌,然后对他们的 API 请求进行身份验证。我不知道他们将从哪里提出请求。

我要实施速率限制的主要原因是减少意外/故意 DDOS 的影响,以及用户当前订阅包的一部分(必要)。因为后者,不同的用户可能有不同的费率。

Laravel 已经提供了一个内置的速率限制器,包括访问 User 表中指定的动态用户限制。

我想知道如何处理会话。从我所见,Laravel TokenGuard 类不会在请求之间存储用户。因此,在每个请求之间都会检索用户,甚至检索速率限制。如果我们仍然每次都进行数据库查询,这似乎破坏了速率限制器的意义。

处理此问题的适当方法是什么?

如果我编写自己的身份验证中间件,并将用户存储在会话中,那会起作用吗?从另一台服务器(不是浏览器)发送的请求是否甚至处理会话?

谢谢。

标签: phplaravelrestful-authenticationrate-limitingthrottling

解决方案


每次有人访问您的站点时,您都​​在启动整个 Laravel 实例,这已经给您的服务器带来了压力。DDOS 不仅仅依赖于困扰您的数据库。如果有人决心对你进行 DDOS,你会注意到的!你所能做的就是缓解这个问题,所以不要太担心每个请求都有一个关联的数据库调用。

你可以有一个本地会话,但从长远来看,这是一个糟糕的设计决策,因为它会将状态引入你的服务器,这将使未来的扩展更加困难。(https://12factor.net/了解更多信息。)这就是 Laravel 使用存储在数据库中的用户的原因。

除非您正在做一些非常特别的事情,否则通常可以安全地假设 Laravel 正在使用适当的解决方案。他们做框架,这样你就可以担心业务逻辑!

最后,还有很多网站。很有可能,当您大到足以吸引尝试 DDOS 的人的注意时(请记住,这需要资源,因此也需要金钱),您可能会使用更复杂的系统。


推荐阅读