Laravel Sanctum CSRF Cookie请求可选

Laravel Sanctum CSRF Cookie请求可选,laravel,cookies,csrf,laravel-sanctum,Laravel,Cookies,Csrf,Laravel Sanctum,我想用拉维圣所做我的水疗。web.php路由中有一些基本的主页,但与SPA的其他axios API交互在auth:sanctum保护的API.php路由中 从官方文档中可以看出,我们必须在登录之前向/sanctum/csrf cookie发送一个初始化csrf保护的请求。然而,我注意到,即使没有登录,Laravel在默认情况下已经初始化了XSRF-TOKEN,并且它说Laravel在每个响应中都包含CSRF令牌是默认行为 我的问题是,/sanctum/csrf cookie初始化是否是可选的,a

我想用拉维圣所做我的水疗。web.php路由中有一些基本的主页,但与SPA的其他axios API交互在auth:sanctum保护的API.php路由中

从官方文档中可以看出,我们必须在登录之前向/sanctum/csrf cookie发送一个初始化csrf保护的请求。然而,我注意到,即使没有登录,Laravel在默认情况下已经初始化了XSRF-TOKEN,并且它说Laravel在每个响应中都包含CSRF令牌是默认行为


我的问题是,/sanctum/csrf cookie初始化是否是可选的,axios使用Laravel返回的默认csrf令牌是否安全?还是我做错了什么使我的SPA受到CSRF攻击?

您的SPA主页可能由您提到的web.php路由文件中定义的路由提供。在App/Http/Kernel.php中,检查中间件组中是否有定义为web中间件的VerifyCsrfToken::类:

此中间件负责创建标头响应,如:set cookie XSRF-TOKEN=kgXZBZ4AccC0H17KEMw。。。。当您请求web.php中可用的任何路由时,如果cookie显然还不存在,那么确实会初始化XSRF-TOKEN cookie

因此,当您已经使用这个VerifyCsrfToken中间件时,不需要请求route/sanctum/csrf cookie

但是,如果您正在执行完全与Laravel后端分离的完整SPA,并以不同的方式交付html页面,则默认情况下不会生成此XSRF-TOKEN cookie。因此,正如Sanctum文档中提到的,在继续之前,您需要请求/Sanctum/csrf cookie生成cookie

    protected $middlewareGroups = [
        'web' => [
            ...
            StartSession::class,
            ...
            VerifyCsrfToken::class,
            ...
        ]
    ]