kasitaw / api-key
用户自定义api密钥(使用自定义Laravel守卫)以使客户端能够与服务器进行外部集成
v3.0.0
2020-10-02 18:51 UTC
Requires
- php: >=7.2
- illuminate/support: ^7.0|^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- laravel/framework: ^7.0|^8.0
- orchestra/testbench: ^5.0
- phpunit/phpunit: ^8.0|^9.0
README
此包使用户能够使用用户定义的api密钥
认证守卫轻松地通过Laravel 6.0+进行用户认证
安装
API密钥可以通过composer安装
composer require "kasitaw/api-key"
包将自动注册自己。
您可以使用以下命令发布迁移
php artisan vendor:publish --provider="Kasitaw\ApiKey\ApiKeyServiceProvider" --tag=migrations
迁移发布后,运行以下命令执行迁移
php artisan migrate
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="Kasitaw\ApiKey\ApiKeyServiceProvider" --tag=config
这是已发布配置文件的内容
<?php return [ /** * Model use to configure Api Key */ 'model' => [ 'api_key' => Kasitaw\ApiKey\ApiKey::class, // Make sure use Kasitaw\ApiKey\Traits\HasApiKey.php trait if you use your own modal ], /** * Table name that reflected to the above model. */ 'table_name' => [ 'api_keys' => 'api_keys', // Table name to the above model ], /** * Column name being used to store generated api key */ 'columns' => [ 'key' => 'key', ], /** * Field name that being used to fetch the "apiKey". Either passed through query params or as a body. */ 'request_key' => [ 'api_key' => 'api_key', ], /** * Generated key length. */ 'key_length' => 80, ];
用法
在开始之前,将config/auth.php
守卫配置如下
'guards' => [ 'web' => [ // ], 'api' => [ // ], /* * Adding new `api_key` key into guards section */ 'api_key' => [ 'driver' => 'api_key', ] ],
在App\User.php
模型或实现\Illuminate\Contracts\Auth\Authenticatable
接口的任何模型中使用HasApiKey.php
特性
<?php namespace App; use Kasitaw\ApiKey\Traits\HasApiKey; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasApiKey; }
使用以下中间件调用端点
// Using `auth:api` as regular user authentication Route::get('/users', function() { // })->middleware('auth:api'); // Using `auth:api_key` to authenticate user for external api Route::get('/external/intergation/users', function() { dd(request()->user()); // or using Auth::guard('api_key')->user() // or using auth('api_key')->user() })->middleware('auth:api_key');
最后,让我们进行认证。有3种方式传递生成的key
- 使用查询参数。例如 /users?api_key=xxx
- 使用HTTP正文。例如 api_key = xxx
- 使用
Authorization
头部。例如 Authorization Bearer xxx
注意:请求头部应提供
Accept
头部。例如 Accept: application/json
用于管理key
的可用方法
生成新的api密钥,该密钥与认证用户相关联
$user->generateNewKey(); // By default will activate the key, pass `false` params to make it inactive
激活所有现有密钥
$user->activateAllKeys();
使用key激活密钥
$user->activateKeyByKey('J1VFYTgUafp21ljEkanJYYnlY1j4REURXgAKzlwAUxABfCWPw4PBw9HKYbG4GWNvi125WUO0P2e7MmqC'); // or $user->activateKeyByKey( 'J1VFYTgUafp21ljEkanJYYnlY1j4REURXgAKzlwAUxABfCWPw4PBw9HKYbG4GWNvi125WUO0P2e7MmqC', '5c9fuEbAny4737an7hXC9VdNmDzd1yE0qn6Am9R8nNzJ0HWROn1daMJ19Lp36XLJlI5QIAkv6xYUkt6U' );
使用uuid激活密钥
$user->activateKeyByUuid('e0b9ed50-31b4-4ed6-a0f7-71490fa15ad6'); // or $user->activateKeyByUuid( 'e0b9ed50-31b4-4ed6-a0f7-71490fa15ad6', '597a67f8-9c19-4c2b-98ff-8020c0f7e360' );
撤销所有现有密钥
$user->revokeAllKeys();
使用key撤销密钥
$user->revokeKeyByKey('J1VFYTgUafp21ljEkanJYYnlY1j4REURXgAKzlwAUxABfCWPw4PBw9HKYbG4GWNvi125WUO0P2e7MmqC'); // or $user->revokeKeyByKey( 'J1VFYTgUafp21ljEkanJYYnlY1j4REURXgAKzlwAUxABfCWPw4PBw9HKYbG4GWNvi125WUO0P2e7MmqC', '5c9fuEbAny4737an7hXC9VdNmDzd1yE0qn6Am9R8nNzJ0HWROn1daMJ19Lp36XLJlI5QIAkv6xYUkt6U' );
使用uuid撤销密钥
$user->revokeKeyByUuid('e0b9ed50-31b4-4ed6-a0f7-71490fa15ad6'); // or $user->revokeKeyByUuid( 'e0b9ed50-31b4-4ed6-a0f7-71490fa15ad6', '597a67f8-9c19-4c2b-98ff-8020c0f7e360' );
使用key删除密钥
$user->removeKeyByKey('J1VFYTgUafp21ljEkanJYYnlY1j4REURXgAKzlwAUxABfCWPw4PBw9HKYbG4GWNvi125WUO0P2e7MmqC'); // or $user->removeKeyByKey( 'J1VFYTgUafp21ljEkanJYYnlY1j4REURXgAKzlwAUxABfCWPw4PBw9HKYbG4GWNvi125WUO0P2e7MmqC', '5c9fuEbAny4737an7hXC9VdNmDzd1yE0qn6Am9R8nNzJ0HWROn1daMJ19Lp36XLJlI5QIAkv6xYUkt6U' );
使用uuid删除密钥
$user->removeKeyByUuid('e0b9ed50-31b4-4ed6-a0f7-71490fa15ad6'); // or $user->removeKeyByUuid( 'e0b9ed50-31b4-4ed6-a0f7-71490fa15ad6', '597a67f8-9c19-4c2b-98ff-8020c0f7e360' );
获取所有密钥
$keys = $user->api_keys; foreach($keys as $key) { // }
删除所有密钥
$user->removeAllKeys();
获取所有激活
密钥
$keys = $user->api_keys()->active()->get(); foreach($keys as $key) { // }
获取所有非激活
密钥
$keys = $user->api_keys()->inActive()->get(); foreach($keys as $key) { // }
检查密钥是否激活
$key = $user->api_keys->first(); dd($key->isActive());
或直接检查密钥是否激活
$uuid = 'e0b9ed50-31b4-4ed6-a0f7-71490fa15ad6'; $user->isKeyActive($uuid); // true/false, return null if key not found // or $key = 'J1VFYTgUafp21ljEkanJYYnlY1j4REURXgAKzlwAUxABfCWPw4PBw9HKYbG4GWNvi125WUO0P2e7MmqC'; $user->isKeyActive($key);
测试
使用以下命令运行测试
vendor/bin/phpunit --testdox --verbose
许可协议
此包是开源软件,根据MIT许可证授权