Laravel 8 如何实现无需Passport/Sanctum的简单API密钥认证
Laravel 8 极简API密钥验证实现方案
以下方案无需引入Passport、Sanctum等扩展包,仅通过自定义中间件即可实现需求:
1. 创建自定义验证中间件
执行Artisan命令生成中间件文件:
php artisan make:middleware VerifyApiKey
打开生成的app/Http/Middleware/VerifyApiKey.php文件,替换为以下代码:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class VerifyApiKey { public function handle(Request $request, Closure $next) { // 读取配置中硬编码的合法API密钥 $validApiKey = config('app.apikey'); // 校验URI参数中的apikey是否合法 if ($request->query('apikey') !== $validApiKey) { return response()->json(['message' => 'Unauthorized'], 401); } return $next($request); } }
2. 注册中间件
打开app/Http/Kernel.php文件,找到$middlewareGroups属性下的api分组,追加刚才创建的中间件,即可让所有API路由默认启用验证:
protected $middlewareGroups = [ 'api' => [ 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, // 新增API密钥验证中间件 \App\Http\Middleware\VerifyApiKey::class, ], ];
如果仅需要给部分API路由添加验证,可将中间件注册到$routeMiddleware属性中:
protected $routeMiddleware = [ // 原有其他中间件 'verify.apikey' => \App\Http\Middleware\VerifyApiKey::class, ];
之后在路由文件中手动给指定路由添加->middleware('verify.apikey')即可。
3. 配置硬编码API密钥
打开项目根目录下的.env文件,新增一行配置自定义的API密钥:
API_KEY=你自定义的随机字符串密钥
打开config/app.php配置文件,新增配置项关联.env配置:
'apikey' => env('API_KEY'),
注意事项
- 该方案仅适用于非生产环境原型测试,生产环境禁止将API密钥放在URI参数中,会被访问日志记录引发泄露风险。
- 硬编码密钥不要直接写在代码文件中,通过.env配置管理避免提交到代码仓库泄露。
内容的提问来源于stack exchange,提问作者Jacques
相关产品推荐
相关产品推荐

