我有以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请求获取数据
答案 0 :(得分:1)
我假设您将使用Laravel身份验证路由进行身份验证,并且在身份验证之后,您到达的下一个视图是包含所有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
上,我们需要在密钥$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路由