Laravel-保护API路由

时间:2019-04-23 18:42:37

标签: laravel api vue.js

我有以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请求获取数据

2 个答案:

答案 0 :(得分:1)

我假设您将使用Laravel身份验证路由进行身份验证,并且在身份验证之后,您到达的下一个视图是包含所有Vue组件的视图。

解决方案很简单,即使在documentation上也是如此,必须阐明必要的步骤。

我们需要:

  1. 添加护照composer require laravel/passport
  2. 进行迁移php artisan migrate
  3. 安装护照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上,我们需要在密钥$middlewareGroups的{​​{1}}数组中添加一个中间件。

web

现在,我们可以在api路由上使用protected $middlewareGroups = [ 'web' => [ ................ //for API authentication with Passport \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, ], 中间件了。

auth:api

答案 1 :(得分:0)

这是CSRF TOKEN所做的,与API授权所做的并不完全相同

CSRF令牌

要保护(内部)API或访问点免受跨站点访问的影响,请参见https://www.terraform.io/docs/commands/index.html

CSRF令牌在随机时间内过期并生成,这将增加程序访问难度

API授权

该API设计为可以在其他程序中使用,并且您希望保护它们免受未经授权的访问

由于API令牌的过期和生成是由管理员手动处理的,因为您需要将此API令牌放置在HTML中才能使函数正常工作,所以这不是您要在此处搜索的


Laravel中CSRF保护的更多详细信息,请参见:Cross-site_request_forgery

通常,默认情况下,我们会保护所有路由POST和PUT路由