Lumen API 身份验证使用 API 密钥策略
Lumen API authentication using API key strategy
我正在使用 Lumen 开发 REST API。 (第 8 版)。我需要为我的 REST API 实施基于 API 密钥的身份验证。例如,我将生成一个 API 密钥并将其提供给需要使用我的 API 的第 3 方。为了生成此密钥,我使用的是 JWT。然后我将密钥保存在数据库中。
<?php
namespace App\Http\Middleware;
use App\ApiKey;
use Closure;
class ApiAuthMiddleware
{
public function handle($request, Closure $next)
{
$tokenValid = ApiKey::where('api_key', $request->header('Authorization'))->exists();
if (!$tokenValid) {
return response()->json('Unauthorized', 401);
}
return $next($request);
}
}
这是我自定义设计的代码,用于检查数据库中的 API 键。我有一些主要的安全问题。
其他第 3 方将在 header 中发送此令牌,任何可以读取有效载荷的人都可以获得 header 并向我发送具有相同 [=41= 的请求].如何防止这种情况?与客户端密钥有关吗?
在每个请求中检查MySQL数据库是否可行?这对数据库来说是不必要的工作量吗?我们可以用一个小的 Redis 实例代替它吗?这样安全吗?
我们可以这样设置令牌:
Redis::set('token', 'jwt_token_here');
最后,是否有一个库可以在不使用我的自定义代码的情况下管理它?我觉得这样更安全高效。
提前致谢。
我正在使用 Lumen 开发 REST API。 (第 8 版)。我需要为我的 REST API 实施基于 API 密钥的身份验证。例如,我将生成一个 API 密钥并将其提供给需要使用我的 API 的第 3 方。为了生成此密钥,我使用的是 JWT。然后我将密钥保存在数据库中。
<?php
namespace App\Http\Middleware;
use App\ApiKey;
use Closure;
class ApiAuthMiddleware
{
public function handle($request, Closure $next)
{
$tokenValid = ApiKey::where('api_key', $request->header('Authorization'))->exists();
if (!$tokenValid) {
return response()->json('Unauthorized', 401);
}
return $next($request);
}
}
这是我自定义设计的代码,用于检查数据库中的 API 键。我有一些主要的安全问题。
其他第 3 方将在 header 中发送此令牌,任何可以读取有效载荷的人都可以获得 header 并向我发送具有相同 [=41= 的请求].如何防止这种情况?与客户端密钥有关吗?
在每个请求中检查MySQL数据库是否可行?这对数据库来说是不必要的工作量吗?我们可以用一个小的 Redis 实例代替它吗?这样安全吗?
我们可以这样设置令牌:
Redis::set('token', 'jwt_token_here');
最后,是否有一个库可以在不使用我的自定义代码的情况下管理它?我觉得这样更安全高效。
提前致谢。