Laravel 8 - 如何实现简单的 API 密钥认证

Jac*_*ues 5 php authentication api-key laravel laravel-8

我正在尝试在 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 包的情况下实现这个简单的身份验证系统?

小智 8

只需使用中间件即可。在 config/app.php 中添加您的密钥

[
  'api_key' => env('API_KEY'),
]
Run Code Online (Sandbox Code Playgroud)

创建中间件并将其添加到 App\Http\Kernel

namespace App\Http\Middleware;
class ApiKeyMiddleware
{
  public function handle($request, Closure $next)
  {
    if (!$key = $request->get('api_key') || $key !== config('app.api_key')) {
      throw new AuthenticationException('Wrong api key');
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
class Kernel extends HttpKernel
{
  protected $middlewareGroups = [
        'api' => [
            App\Http\Middleware\ApiKeyMiddleware::class
            'throttle:300,1',
            'bindings',
        ],
  ]
}
Run Code Online (Sandbox Code Playgroud)