通过API令牌认证的Laravel限速API

时间:2019-01-29 10:06:52

标签: php laravel restful-authentication rate-limiting throttling

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

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

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

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

我想知道会话的处理方式。从我可以看到,Laravel TokenGuard类不会在请求之间存储用户。因此,在每个请求之间都会检索用户,甚至是检索速率限制。如果我们仍然每次都在进行数据库查询,这似乎使速率限制器失去了作用。

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

如果我编写自己的身份验证中间件并将用户存储在会话中,那行得通吗?从其他服务器(而不是浏览器)发送的请求是否可以处理会话?

谢谢。

2 个答案:

答案 0 :(得分:0)

每次有人访问您的网站时,您都在旋转整个Laravel实例,这已经使您的服务器承受压力。 DDOS不仅取决于使数据库陷入困境。如果有人确定要使用DDOS,那么您会发现!您所能做的就是减轻问题,因此不必太担心每个请求都具有关联的数据库调用。

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

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

最后,那里有很多网站。机会是,当您足够大时,会吸引尝试使用DDOS的人们的注意(记住,这需要资源,因此也要花钱),您可能会使用更加复杂的系统。

答案 1 :(得分:0)

如果带有某种令牌的请求到达您的应用程序,则您不需要任何会话。如您所料:会话通常通过cookie处理,但是原始的HTTP调用(例如cURL这样做)通常不使用它们。

不要高估从数据库中获取当前用户的成本-如果您的应用程序执行更多操作,则这些其他操作将有所作为!与其他所有对象相比,从数据库中获取一个实体是相当便宜的,并且要检查适当的权限和速率限制,这显然是必要的。

其他所有内容似乎都在寻找Laravel Passport之类的东西(请参见https://laravel.com/docs/5.7/passport)。 Throttle程序包之类的其他工具(请参见https://github.com/GrahamCampbell/Laravel-Throttle)将帮助您启用路线的速率限制