是否可以仅通过一个API密钥允许访问Laravel API?

时间:2019-11-15 19:44:27

标签: php laravel api api-key

我是Laravel API世界的新手。我想制作一个简单的Laravel应用程序,而不是以json格式返回一些东西。我不希望具有url链接的任何人都可以访问它。我只允许通过一个API密钥进行访问。可能吗?还是每个用户都必须具有唯一的密钥?怎么办呢?

2 个答案:

答案 0 :(得分:4)

是可能的。

您必须在users表中具有api_token字段,并且还必须在api路由中添加中间件。 api.php

Schema::table('users', function ($table) {
    $table->string('api_token', 80)->after('password')
                        ->unique()
                        ->nullable()
                        ->default(null);
});

api路由中的中间件(api.php):

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

您还可以为自己的api定义自定义api防护,例如,如果您有两个称为Doctor和Patient的表,则将有两个表,并且对于两个用户,您将需要唯一的api_token,您可以定义这些自定义api防护在您的config / auth.php

请参阅此处:https://laravel.com/docs/5.8/api-authentication

答案 1 :(得分:0)

是的,这是绝对可能的。我们不知道您对应用程序的要求,但是,如果您只希望返回一些东西,因此无需识别哪个用户做了什么,则没有理由为每个用户提供密钥作为另一个答案。

例如,您可以将密钥放入.env

API_KEY=yourkey

然后,只需将中间件添加到api路由,它将首先检查在请求内是否传递了正确的ApiKey。

您可以将env变量传递到任何配置文件,然后在应用程序中的任何位置调用config('yourConfigFile.apiKey')

对于某些简单情况,此方法已足够100%。考虑到谁将有权使用此密钥以及如何将其传递。如果只有一个全局密钥,并且您的api使用者将仅使用ajax而不通过服务器对其进行传播,那么您的api密钥将被公开,并且每个人都可以在任何地方使用它。

在这种情况下,您仍然可以避免为每个用户创建密钥-只需指定允许域的列表即可调用您的API,然后检查密钥。所有这些都可以在中间件中检查。

就像我说的,了解您的需求/用例,然后做出决定:-)