Laravel - 保护 API 路由
Posted
技术标签:
【中文标题】Laravel - 保护 API 路由【英文标题】:Laravel - Protect API routes 【发布时间】:2019-09-13 00:17:11 【问题描述】:我有以 VUEJS 作为前端的 Laravel 应用程序, 我通过创建 API 路由来获取数据。 例如获取帖子数据的路径是http://localhost/api/posts
保护我的路线的最佳方法是什么?
我在 laravel 文档中看到有: API认证https://laravel.com/docs/5.8/api-authentication 还有护照https://laravel.com/docs/5.8/passport
例如现在任何用户都可以到达路由http://localhost/api/posts 他会得到包含所有帖子数据的json。
我想保护它并只允许来自我的 VUEJS 组件的内部 api 请求来获取数据
【问题讨论】:
【参考方案1】:我假设您将使用 Laravel auth 路由进行身份验证,并且在身份验证之后,您到达的下一个视图是包含所有 Vue 组件的视图。
解决方法很简单,即使是documentation,也应该明确必要的步骤。
我们需要:
-
添加护照
composer require laravel/passport
进行迁移php artisan migrate
安装护照php artisan passport:install
第四步比较复杂。我们需要打开我们的 User.php 模型文件。首先我们需要导入 HasApiTokens 并告诉模型使用它。
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
use HasApiTokens, Notifiable;
.......
然后在我们的config/auth.php
上我们需要修改api数组,把驱动改成passport
'api' => [
//for API authentication with Passport
'driver' => 'passport',
'provider' => 'users',
],
然后在我们的app/Http/Kernel.php
上,我们需要在键web
中的$middlewareGroups
数组中添加一个中间件。
protected $middlewareGroups = [
'web' => [
................
//for API authentication with Passport
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
现在我们可以在我们的 api 路由上使用 auth:api
中间件。
Route::middleware('auth:api')->group( function()
...your routes here
);
【讨论】:
【参考方案2】:这就是 CSRF TOKEN 做的,和 API Authorization 做的不太一样
CSRF 令牌:
要保护(内部)API 或访问点免受跨站点访问,请参阅Cross-site_request_forgery
CSRF Token过期并随机生成,会导致程序访问困难
API 授权:
该 API 旨在供其他程序使用,您希望保护它们免受未经授权的访问
由于 API 令牌的到期和生成由管理员手动处理,因此您需要将此 API 令牌放在 html 中以使您的功能正常工作,所以这不是您在此处搜索的内容
更多关于 Laravel 中 CSRF 保护的细节见:Laravel CSRF production document
一般情况下,我们会默认保护所有的 POST 和 PUT 路由
【讨论】:
以上是关于Laravel - 保护 API 路由的主要内容,如果未能解决你的问题,请参考以下文章
如何保护 laravel api 路由免受外部 GET 请求的影响
Laravel Passport - 保护不同用户类型的路由