Laravel 在 api 中间件上启用 csrf 保护

Laravel enable csrf protection on api middleware

我正在研究 Laravel 5.4,我的路由在 api 中间件中

我看到我需要将我的路由传输到网络中间件,但我需要它们在 api 中间件上,因为我正在创建 RESTful api,关于如何的任何建议 我可以将 csrf 与 api 中间件一起使用吗?

确保您的 Web 中间件组包含以下行,并确保使用相同版本的全新 laravel 安装来验证内容。

\App\Http\Middleware\VerifyCsrfToken::class,

并验证路由是否使用了网络中间件。您通过 运行 php artisan route:list 检查并记下中间件列。

您可以在任何路由组中使用任何中间件以及您的自定义中间件。 Laravel 对我们来说非常容易。只需打开 App\Http 命名空间中的 Kernel.php 文件。在第 28 行找到 protected $middlewareGroups probable 并更改如下代码以允许在 api 路由中启用 Csrf 保护:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],
];

CSRF 保护可防止使用先前经过身份验证的用户进行攻击(通常使用会话设置状态)https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

一个restfulAPI没有状态https://en.wikipedia.org/wiki/Representational_state_transfer,所以没有会话可以攻击。因此,在 restful API 中,CSRF 保护是在每个请求中对用户进行身份验证,如果您仅在第一个请求中对用户进行身份验证并为以下请求使用会话,则您不会进行 restfull API 应该使用 web 中间件。

编辑: 如果你没有任何状态,你将如何获得客户端的 CSRF 令牌?