【问题标题】:Laravel - Protect API routesLaravel - 保护 API 路由
【发布时间】: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 请求来获取数据

【问题讨论】:

    标签: laravel api vue.js


    【解决方案1】:

    我假设您将使用 Laravel auth 路由进行身份验证,并且在身份验证之后,您到达的下一个视图是包含所有 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 上,我们需要在键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 路由

      【讨论】:

        猜你喜欢
        • 2018-06-28
        • 1970-01-01
        • 2017-10-12
        • 2023-03-28
        • 2015-03-11
        • 2018-09-12
        • 2017-02-11
        • 2016-04-15
        • 2016-02-11
        相关资源
        最近更新 更多