Laravel 8 - 如何实现简单的 API 密钥认证
Laravel 8 - How to implement simple API key authentication
我正在尝试为 Laravel 8 中的 API 实现一个非常简单的原型(非生产)身份验证系统。我的目标是让任何拥有硬编码 API 密钥的用户都能够使用端点。否则,他们将在所有端点收到 401 错误。用户必须包含 API 键作为 URI 参数,格式如下例:
'hostAddress'/api/endpoint1?apikey='APIkey'
其中 'hostAddress' 代表主机 ipv6 地址,'APIkey' 代表硬编码的 API 密钥。
我对这个问题所做的每一次搜索都会让我找到 Laravel 8 文档 (https://laravel.com/docs/8.x/authentication)。但是,文档中的身份验证解决方案比我正在寻找的要复杂得多。
如何在不使用 Passport 和 Sanctum 等复杂 Laravel 包的情况下实现这个简单的身份验证系统?
只需使用middleware。在 config/app.php
中添加您的密钥
[
'api_key' => env('API_KEY'),
]
创建中间件并将其添加到App\Http\Kernel
namespace App\Http\Middleware;
class ApiKeyMiddleware
{
public function handle($request, Closure $next)
{
if(!$key = $request->get('apikey') or $key !== config('app.api_key'){
throw new AuthenticationException('Wrong api key');
}
}
}
class Kernel extends HttpKernel
{
protected $middlewareGroups = [
'api' => [
App\Http\Middleware\ApiKeyMiddleware::class
'throttle:300,1',
'bindings',
],
]
}
我正在尝试为 Laravel 8 中的 API 实现一个非常简单的原型(非生产)身份验证系统。我的目标是让任何拥有硬编码 API 密钥的用户都能够使用端点。否则,他们将在所有端点收到 401 错误。用户必须包含 API 键作为 URI 参数,格式如下例:
'hostAddress'/api/endpoint1?apikey='APIkey'
其中 'hostAddress' 代表主机 ipv6 地址,'APIkey' 代表硬编码的 API 密钥。
我对这个问题所做的每一次搜索都会让我找到 Laravel 8 文档 (https://laravel.com/docs/8.x/authentication)。但是,文档中的身份验证解决方案比我正在寻找的要复杂得多。
如何在不使用 Passport 和 Sanctum 等复杂 Laravel 包的情况下实现这个简单的身份验证系统?
只需使用middleware。在 config/app.php
中添加您的密钥[
'api_key' => env('API_KEY'),
]
创建中间件并将其添加到App\Http\Kernel
namespace App\Http\Middleware;
class ApiKeyMiddleware
{
public function handle($request, Closure $next)
{
if(!$key = $request->get('apikey') or $key !== config('app.api_key'){
throw new AuthenticationException('Wrong api key');
}
}
}
class Kernel extends HttpKernel
{
protected $middlewareGroups = [
'api' => [
App\Http\Middleware\ApiKeyMiddleware::class
'throttle:300,1',
'bindings',
],
]
}