【发布时间】:2021-02-10 14:12:44
【问题描述】:
我正在使用 Lumen 开发 REST API。 (第 8 版)。我需要为我的 REST API 实现基于 API 密钥的身份验证。例如,我将生成一个 API 密钥并将其提供给需要使用我的 API 的第三方。为了生成这个密钥,我使用了 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 密钥。我有一些重大的安全问题。
-
其他 3rd 方将在标头中发送此令牌,任何可以读取有效负载的人都可以获取标头并向我发送具有相同标头的请求。如何防止这种情况?与客户端密钥有关吗?
-
在每个请求中检查 MySQL 数据库是否可行?这对数据库来说是不必要的工作量吗?我们可以用一个小的 Redis 实例替换它吗?那安全吗?
我们可以这样设置令牌:
Redis::set('token', 'jwt_token_here');
最后,是否有一个库可以在不使用我的自定义代码的情况下进行管理?我认为它更安全,更高效。
提前谢谢你。
【问题讨论】:
标签: php laravel jwt lumen api-key