【问题标题】:Is there a way to protect some API routes in Laravel without user authentication?有没有办法在没有用户身份验证的情况下保护 Laravel 中的某些 API 路由?
【发布时间】:2019-09-01 04:15:42
【问题描述】:

在我的 Laravel 项目中,我正在存储有关事件的数据并将它们返回到一个网站,该网站是可以进行位置预订的活动网站。每个活动都有自己的网站。我使用 ajax GET 和 POST 获取活动数据并保存预订详细信息,效果很好,但我想保护这些路线,但我不知道该怎么做。

我读过一些关于 Laravel Passport 的文章,但问题是这些活动网站不需要注册,参与者只需填写表格并为自己保留位置,Passport 的令牌逻辑只能帮助我如果我理解文档正确,是否涉及经过身份验证的用户。

这些是 api 路由: Route::get('event/{id}', 'ApiRoutesController@show'); Route::post('reserve', 'ApiRoutesController@reserve');

我想通过某种方式保护这些路线来防止人们(如果他们知道我的 post 方法逻辑)向我的数据库发送无效位置预订的垃圾邮件,如果没有 Laravel Passport,这可能吗?

【问题讨论】:

  • 即使您使用 Passport,您也可以拥有未经身份验证的 API 路由(例如,您将如何 POST 登录路由?) Passport 处理围绕 API 请求的 OAuth 逻辑,但它已经完成了给你在哪里使用它。话虽如此,“无效注册垃圾邮件”到底是什么意思?是什么使它无效?他们将如何发送垃圾邮件?等等等等。
  • 首先感谢您的回复,发送垃圾邮件的意思是,如果他们知道我的预订背后的逻辑(他们可以使用浏览器开发工具查看我加载的处理预订的脚本,他们也会看到我的 api我在向 Laravel 发送发布请求时定位的 url) 方法可以使用错误的虚拟数据保留属于该事件的位置。

标签: laravel api


【解决方案1】:

Laravel 提供了预定义的中间件,您可以通过 assign 路由或创建自己的 custom middleware。

在您的情况下,我认为 Illuminate\Routing\Middleware\ThrottleRequests 中间件可能很有用。它将限制某人在特定时间段内从同一 IP 地址(或使用同一用户帐户,但这不适用于您的情况)调用路由的次数。

要将其添加到您的路由中,您需要确保throttle 中间件位于您的App\Http\Kernel 文件中的routeMiddleware 数组中,例如:

protected $routeMiddleware = [
  ... other middleware ...
  'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
  ...
];

然后你需要将它添加到你想要保护的路由中,例如:

 Route::get('event/{id}', 'ApiRoutesController@show')->middleware('throttle');

您还可以在middleware 函数的参数中指定最大尝试次数和以分钟为单位的时间段,如下所示:

  Route::get('event/{id}', 'ApiRoutesController@show')->middleware('throttle:10,1');

【讨论】:

    【解决方案2】:

    您始终可以使用如下的身份验证中间件来保护路由:

    Route::get('event/{id}', function () {
        // Only authenticated users may enter...
    })->middleware('auth');
    

    (见Laravel documentation)

    问题是您现在需要一种对用户进行身份验证的方法。只有这样他才能调用这条路线。

    您说没有办法注册...那么您希望如何验证一个人以使用 API?

    我的意思是您需要某种方法来确定哪个请求是合法的,哪个不是。这可能类似于经过身份验证的用户,甚至可能类似于您通过 HTTP 标头发送的 API 密钥。你只需要确定你想如何设计它。然后,我们可以帮助您实现它。

    【讨论】:

    • 对不起,我不够具体,所以如果有人使用我的 Laravel 应用程序注册,他们可以使用仪表板创建事件,而不是通过复制一些代码,他们可以将该代码嵌入到他们自己的网站中,而该特定代码将“创建”一个属于他们刚刚使用仪表板制作的事件的预订界面。之后,他们网站上的访问者可以使用我的预订界面预订位置,这就是 api 路由进入的地方,因为带有事件和位置数据的 ajax 发布请求被发送到我的 Laravel 后端,这就是我想要我的安全的地方路线
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2016-04-07
    • 2021-02-03
    • 2018-09-28
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多