Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/larvatecn/laravel-auth-signature-guard
Signature guardian for Laravel Auth, based on Laravel Passport .
https://github.com/larvatecn/laravel-auth-signature-guard
Last synced: 12 days ago
JSON representation
Signature guardian for Laravel Auth, based on Laravel Passport .
- Host: GitHub
- URL: https://github.com/larvatecn/laravel-auth-signature-guard
- Owner: larvatecn
- License: mit
- Created: 2021-03-06T09:42:01.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2022-06-03T16:27:39.000Z (over 2 years ago)
- Last Synced: 2024-11-25T11:46:33.671Z (27 days ago)
- Language: PHP
- Homepage:
- Size: 8.79 KB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# laravel-auth-signature-guard
适用于 Laravel Auth 的签名看守器,基于 Laravel Passport
## 安装
```bash
composer require larva/laravel-auth-signature-guard
``````php
//认证配置
/config/auth.php//增加一个看守器
'guards' => [
'web'=>[],//原WEB的
'api'=>[],//原API
'signature'=>[//新增的
'driver'=>'signature'
'provider'=>'users',
]
]
// 使用时在控制器中class SDKController extends Controller
{
public function __construct()
{
$this->middleware('auth:signature');
}
}//按照以上配置,该控制器所有的方法都会经过签名看守器认证。
```
### 公共请求参数
公共请求参数是每个接口都需要使用到的请求参数。
| 名称 | 类型 | 描述 |
| ------------- | ----------- | ----------- |
| `app_id` | String | 访问服务使用的应用ID。 |
| `timestamp` | Int | 请求的时间戳,10位数整形。 |
| `signature` | String | 签名结果串。 |
| `signature_method` | String | 签名方式,取值:HMAC-SHA1/HMAC-SHA256 |
| `signature_version` | String | 签名版本,取值:1.0 |
| `signature_nonce` | String | 唯一随机数,用于防止网络重放攻击。在不同请求间要使用不同的随机数值。 |参数签名计算 例子
```php
$appKey = '123456';
$params = [
'app_id' => 3,
'timestamp' => 1555069945,
'signature_method'=>'HMAC-SHA1',
'signature_version'=>'1.0',
'signature_nonce'=>'rakdienakdig',
'key1'=>'val1',
'key2'=>'val2'
];//排序参数
//按照键名对关联数组进行升序排序
ksort($params);
//编码
$stringToSign = urlencode(http_build_query($params, null, '&', PHP_QUERY_RFC3986));
$stringToSign = str_replace(['+', '*'], ['%20', '%2A'], $stringToSign);
$stringToSign = preg_replace('/%7E/', '~', $stringToSign);//签名
$params['signature'] = base64_encode(hash_hmac('sha1', $stringToSign, $appKey.'&', true));// 你的HTTP 实例,
$res = $http->post('your api url/path',$params);//其中参数中的时间戳和世界标准时间相差不能超过1分钟。
//签名计算例子 在tests 目录
```