reksakarya / laravel-signature
通过签名进行安全保护
Requires
- php: ^7.3.0
README
介绍
Laravel Signature 通过签名来识别访问您端点的用户,从而帮助您保护数据。
需求
目前,Laravel Signature 仅支持
- Laravel ^7.x。
- PHP ^7.3.0
安装
-
运行
composer require reksakarya/laravel-signature
。 -
在
composer.json
中添加自动加载
...
"autoload": {
"psr-4": {
...
"LaravelSignature\\": "vandor/reksakarya/laravel-signature/src",
...
}
}
...
-
运行命令
composer dump-autoload
-
在 `config/app.php` 中添加提供者
"providers" => [
...
/*
* Package Service Providers...
*/
LaravelSignature\SignatureServiceProvider::class,
...
]
- 要将签名配置发布到应用程序,运行
$ php artisan vendor:publish --tag=laravel-signature
- 接下来,我们需要在您的
.env
中设置环境变量
SIGNATURE_EPNBP_ID=
SIGNATURE_EPNBP_KEY=
SIGNATURE_EPNBP_SECRET=
SIGNATURE_KERJASAMABU_ID=
SIGNATURE_KERJASAMABU_KEY=
SIGNATURE_KERJASAMABU_SECRET=
SIGNATURE_JASAPERBANKAN_ID=
SIGNATURE_JASAPERBANKAN_KEY=
SIGNATURE_JASAPERBANKAN_SECRET=
SIGNATURE_PENDAPTANLAINLAIN_ID=
SIGNATURE_PENDAPTANLAINLAIN_KEY=
SIGNATURE_PENDAPTANLAINLAIN_SIGNATURE=
- 别忘了运行
php artisan config:cache
保存您的配置更改到缓存
然后,安装过程就完成了
如何使用
默认情况下,Reksa Karya Laravel Signature 为现有的应用程序创建签名,包括 E-PNBP Telekomunikasi, E-PNBP POS, Kerjasama Badan Usaha, Management Kas, and Pendapatan Lain Lain
要创建签名,在您的类中调用 Signature 并可以调用静态方法 Signature::make(string $url, array $credential)
,或者您可以在您的应用程序中指定
注意!
$credential
变量应该是数组,其值如下$credentiial = [ id: $your-signature-id key: $your-signature-key secret: $your-signature-secret ];
<?php
...
use LaravelSignature\Helpers\Signature;
...
class YourPortalController {
...
public function getRealisasiPendapatan($year)
{
...
$url = 'https://ditdal.kominfo.go.id/api/portal-pendapatan/realisasi?tahun='.$year
$signatureEpnbp = Signature::epnbp($url);
...
...
$url = 'https://epnbp.baktikominfo.id/api/portal-pendapatan/realisasi?tahun='.$year
$signatureKerjasamaBU = Signature::kerjasamabu($url);
...
...
$url = 'https://epnbp.baktikominfo.id/bank/api/portal-pendapatan/realisasi?tahun='.$year
$signatureJasaPerbankan = Signature::jasaperbankan($url);
...
...
$url = 'https://epnbp.baktikominfo.id/pendapatanlainlain/api/portal-pendapatan/realisasi?tahun='.$year
$signatureJasaPerbankan = Signature::pendapatanlainlain($url);
...
}
...
}
如果您想验证签名,可以调用方法 Signature::validate($request, $app);
,其中参数 $app
是字符串 'epnbp' 或 'kerjasamabu' 或 'jasaperbankan' 或 'pendapatanlainlain'。以下是一个示例
<?php
...
use Illuminate\Http\Request;
use LaravelSignature\Helpers\Signature;
...
class PortalApiController extends Controller {
...
public function getRealisasiPendapatan(Request $request, $year)
{
...
$isValid = Signature::validate($request, 'epnbp');
...
...
$isValid = Signature::validate($request, 'kerjasamabu');
...
...
$isValid = Signature::validate($request, 'jasaperbankan');
...
...
$isValid = Signature::validate($request, 'pendapatanlainlain');
...
}
...
}
在 Postman 中的实现
如果您想通过 Postman 测试签名,首先设置 Postman 的 Pre-request Script 以测试带有签名的 API。
首先添加以下变量到环境
接下来,将此脚本添加到每个请求的 Pre-request Script
以在发送请求之前生成签名
function getPath(url) {
var pathRegex = /.+?\:\/\/.+?(\/.+?)(?:#|\?|$)/;
var result = url.match(pathRegex);
return result && result.length > 1 ? result[1] : '';
}
function getAuthHeader(httpMethod, requestUrl) {
var requestPath = getPath(requestUrl);
payload = pm.environment.get('SIGNATURE_EPNBP_ID') + ':' + requestPath + ':' + pm.environment.get('SIGNATURE_EPNBP_KEY');
postman.setEnvironmentVariable('signature_payload', payload);
var hmacSignature = CryptoJS.HmacSHA256(payload, pm.environment.get('SIGNATURE_EPNBP_SECRET'));
return hmacSignature;
}
postman.setEnvironmentVariable('signature', getAuthHeader(request['method'], request['url']));
别忘了在您的 header request 中添加 signature
键,如下所示