gpt4 book ai didi

Laravel sainttum token 身份验证在模型绑定(bind)后运行

转载 作者:行者123 更新时间:2023-12-02 19:05:29 24 4
gpt4 key购买 nike

TL;博士:
如果承载 token 请求到达具有路由模型绑定(bind)但 token 不正确的端点,则响应应为 401 而不是 404。但它是 404,因为在检查 token 之前解析了模型。

环境:

  • Laravel 8
  • 圣殿
  • API 请求的不记名 token 身份验证;不涉及 SPA。
  • 使用隐式路由模型绑定(bind)

我的问题:
例如使用这个 api-route:

//routes/api.php
Route::middleware('auth:sanctum')->group(function () {
Route::get('surveys/{survey:uuid}', [SurveyController::class, 'getSurveyDetails']);
});

当使用不正确的承载 token 和不存在的调查 UUID 请求此路由时,它不会返回未经身份验证的 401,而是返回 404,因为它找不到请求的型号。

对我来说,这似乎是一个安全问题,因为未经身份验证,请求可以证明 ID 是否存在。

我尝试过的:
如此处所述:https://github.com/laravel/framework/issues/6118
\Illuminate\Routing\Middleware\SubstituteBindings - 中间件负责解析路由模型绑定(bind)。
但尚不完全清楚它是否应该在任何身份验证/授权操作之前或之后运行。

此外,根据 sactum-package-code,\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful-中间件应该负责验证不记名 token 。

据我了解,它还将其设置为中间件优先级列表的顶部。

//Laravel/Sanctum/src/SanctumServiceProvider
protected function configureMiddleware()
{
$kernel = $this->app->make(Kernel::class);

$kernel->prependToMiddlewarePriority(EnsureFrontendRequestsAreStateful::class);
}

据此,我也厌倦了在 Http/Kernel.php 中配置我的优先级列表以确保这种行为:

//App/Http/Kernel.php
protected $middlewarePriority = [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
];

不幸的是,它不断返回 404 而不是 401。检查 token 应该在模型解析之前完成。

有什么想法吗?
感谢您的任何提示。

最佳答案

对于遇到类似问题的任何人:解决方案是将 \App\Http\Middleware\Authenticate::class 中间件添加到 $middlewarePriority 数组最顶部

这样做,数组应该如下所示:

//App/Http/Kernel.php
protected $middlewarePriority = [
\App\Http\Middleware\Authenticate::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
];

这样,在处理其他任何事情之前,始终会检查身份验证。

希望这会对某人有所帮助。

关于Laravel sainttum token 身份验证在模型绑定(bind)后运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65111155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com