TL;DR:
如果承载令牌请求使用路由模型绑定但使用不正确的令牌访问端点,则响应应该是401而不是404。不过,它是404,因为在检查令牌之前,模型是解析的。
环境:
8
。
我的问题:
例如,使用此api路由:
//routes/api.php
Route::middleware('auth:sanctum')->group(function () {
Route::get('surveys/{survey:uuid}', [SurveyController::class, 'getSurveyDetails']);
});当使用不正确的承载令牌和不存在的调查uuid请求此路由时,它不会返回未经身份验证的401,而是返回404,因为它找不到所请求的模型。
在我看来,似乎是一个安全问题,因为没有经过身份验证,请求就可以证明ID是否存在。
我尝试过的:
如本文所述:https://github.com/laravel/framework/issues/6118
\Illuminate\Routing\Middleware\SubstituteBindings中间件负责解析路由模型绑定.
但是,还不完全清楚它是应该在任何身份验证/授权操作之前还是之后运行。
另外,根据封装代码,\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful-middleware应该负责验证承载令牌。
据我所知,它还将其设置为中间件优先级列表的首位。
//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。在解析模型之前,应该检查令牌。
有什么想法吗?
谢谢你的暗示。
发布于 2020-12-16 12:35:15
对于遇到类似问题的任何人:解决方案是将\App\Http\Middleware\Authenticate::class中间件添加到最顶层的$middlewarePriority-array 中。
这样做,数组应该如下所示:
//App/Http/Kernel.php
protected $middlewarePriority = [
\App\Http\Middleware\Authenticate::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
];这样,在处理任何其他内容之前,始终会检查身份验证。
希望这个能帮到别人。
https://stackoverflow.com/questions/65111155
复制相似问题