trappistes/api-sign

Laravel API 签名校验

1.1.2 2023-06-02 08:44 UTC

This package is auto-updated.

Last update: 2024-10-01 00:14:57 UTC


README

介绍

Laravel/Lumen API 签名校验包

安装教程

Laravel

首选安装包

composer require trappistes/api-sign

发布资源(非必须),仅在需要调整表数据结构时使用

php artisan vendor:publish

执行迁移

php artisan migrate

注册路由中间件,在 app/Http/Kernel.php 中添加

protected $routeMiddleware = [
     'sign' => \Trappistes\ApiSign\Middlewares\SignatureValidate::class
];

Lumen

首选安装包

composer require trappistes/api-sign

需要手动注册服务,在 bootstrap/app.php 中添加

$app->register(\Trappistes\ApiSign\SignatureServiceProvider::class);

发布资源(非必须),仅在需要调整表数据结构时使用

将 database/migrations/create_access_keys_table.php 复制到 database/migrations 目录下

执行迁移

php artisan migrate

注册路由中间件, 在 bootstrap/app.php 中添加

$app->routeMiddleware([
   'sign' => \Trappistes\ApiSign\Middlewares\SignatureValidate::class
]);

使用

请求参数

业务参数

如果API本身有业务级的参数也必须传入。如:http://endpoint.com/api/users?group_id=1&active=1&foo=bar... group_id=1 active=1 foo=bar 等query_param需要进行签名。

签名方法

  1. 对除sign参数外的所有API请求参数(包括公共参数access_key,method,nonce,timestamp,(不含sign-string)和业务请求参数),根据参数名称的ASCII码表的顺序排序。 如:foo=1, bar=2, foo_bar=3, foobar=4 排序后的顺序是 bar=2, foo=1, foo_bar=3, foobar=4;
  2. 将排序好的参数名和参数值拼装在一起,根据上面的示例得到的结果为:bar2foo1foo_bar3foobar4;
  3. 把拼装好的字符串采用utf-8编码,使用签名算法对编码后的字符串进行摘要; 如:md5(bar2foo1foo_bar3foobar4 + secret) ,hash_hmac('sha256', bar2foo1foo_bar3foobar4 + secret, secret);
  4. 将摘要得到的字节结果使用大写表示。如:strtoupper($sign_string);

后端校验方法

在需要校验的路由上使用中间件校验

Laravel

Route::resource('user',UserController::class)->middleware('sign');

Lumen

$router->get('admin/profile','AdminController@showProfile'])->middleware('sign')

key & secret 管理(略)CURD自行实现

Trappistes\ApiSign\Models\AccessKey;