使用对称密钥算法加密签名数据。验证签名数据并识别可能的验证错误。使用sha-(1, 224, 256, 385和512)/hmac进行签名加密。允许自定义哈希算法。提供用于签名(和验证)字典和URL的有用快捷函数。
Requires
- php: ^7.2 || ~8.0.0
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- ext-xdebug: *
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^0.12.91
- phpstan/phpstan-phpunit: ^0.12.20
- phpstan/phpstan-strict-rules: ^0.12.10
- phpunit/phpunit: >=8.0.0
- psalm/plugin-phpunit: ^0.16.1
- vimeo/psalm: ^4.8.1
README
允许您轻松地使用对称密钥算法加密签名数据。允许您验证签名数据并识别可能的验证错误。使用sha/hmac进行签名加密。包含用于签名(和验证)字典的快捷函数。
关键概念
相互通信的主机共享密钥,该密钥用于签名数据(请求)。密钥永远不会被发送。
其中一种情况是HTTP请求的签名。每个(HTTP)请求在发送方使用共享密钥签名,并生成三联体(signature
,auth_user
,valid_until
),这些联体用于签名请求。
signature
(string
):生成的签名。auth_user
(string
):发起请求的用户。可以是任何内容。valid_until
(float
或string
):签名的过期时间(Unix时间戳)。
在接收方,使用共享密钥验证(HTTP请求)数据。检查签名是否有效且未过期。
┌─────────────┐ Data ┌─────────────┐
│ Host 1 ├────────────────────────────>│ Host 2 │
│ ─────────── │ │ ─────────── │
│ secret key │ │ secret key │
│ 'my-secret' │<────────────────────────────┤ 'my-secret' │
└─────────────┘ Data └─────────────┘
特性
- 签名字典。
- 验证签名字典。
先决条件
- composer
- php-json
- php-mbstring
生态系统
需要其他语言的ska
?请查看以下关联项目
生成的签名在Python、NodeJS和PHP实现之间是互操作的。
安装
从composer注册表获取最新稳定版本
composer require barseghyanartur/ska
用法示例
存在用法示例。
php examples/kitchen_sink.php
基本用法
发送方
签名字典就像这样简单。
必需的导入。
require_once(dirname(__FILE__)."/src/SKA/core.php"); use SKA;
签名数据
示例使用
$signedData = SKA\signatureToDict("user", "your-secret_key"); print_r($signedData);
示例输出
Array ( [signature] => WEwnd40jMusHD6hRZ9WOCR8Zym4= [auth_user] => user [valid_until] => 1631795130.0 [extra] => )
将附加数据添加到签名的方式相同
$signedData = SKA\signatureToDict( "user", "your-secret_key", [ "email" => "john.doe@mail.example.com", "first_name" => "John", "last_name" => "Doe", ] ); print_r($signedData);
示例输出
Array ( [signature] => B0sscS+xXWU+NR+9dBCoGFnDtlw= [auth_user] => user [valid_until] => 1631797926.0 [extra] => email,first_name,last_name [email] => john.doe@mail.example.com [first_name] => John [last_name] => Doe )
选项和默认值
signatureToDict
函数接受一个可选的$options
参数。
$options
中validUntil
的默认值是从现在起的10分钟。如果您想让它不同,请设置signatureToDict
函数中的$options
中的validUntil
。
签名的默认有效期是10分钟(600秒)。如果您想让它不同,请设置signatureToDict
函数中的$options
中的lifetime
。
包含生成的签名值的(GET)参数的默认名称是signature
。如果您想让它不同,请设置signatureToDict
函数中的$options
中的signatureParam
。
包含authUser
值的(GET)参数的默认名称是auth_user
。如果您想让它不同,请设置signatureToDict
函数中的$options
中的authUserParam
。
包含validUntil
值的(GET)参数的默认名称是valid_until
。如果您想让它不同,请设置signatureToDict
函数中的$options
中的validUntilParam
。
默认的(GET)参数名称为 extra
,用于保存额外的值。如果您希望它有所不同,请设置 signatureToDict
函数的 $options
中的 extraParam
。
$signedData = SKA\signatureToDict( "user", "your-secret_key", [ "email" => "john.doe@mail.example.com", "first_name" => "John", "last_name" => "Doe", ], [ "authUserParam" => "webshop_id" ] ) print_r($signedData);
示例输出
Array ( [signature] => nu0Un+05z/cNOFnLwQnigoW/KmA= [webshop_id] => user [valid_until] => 1631799172.0 [extra] => email,first_name,last_name [email] => john.doe@mail.example.com [first_name] => John [last_name] => Doe )
接收方
验证签名请求数据非常简单,如下所示。
验证签名请求
验证签名请求数据。注意,$data
的值应为一个字典;以下以 $request->GET
为例。
$validationResult = SKA\validateSignedRequestData( $request->GET, // Note, that `$request->GET` is given as example. "your-secret_key" );
选项和默认值
与 signatureToDict
函数类似,validateSignedRequestData
也接受多个可选参数(这些参数已在上面描述)
- signatureParam
- authUserParam
- validUntilParam
- extraParam
经过一些自定义后,将看起来如下
$validationResult = SKA\validateSignedRequestData( $request->GET, "your-secret_key", [ "authUserParam" => "webshop_id" ] );
测试
只需简单输入
composer test
代码风格
使用 Prettier
进行格式化。
npx prettier --write .
许可证
MIT
支持
如有任何问题,请通过作者部分提供的电子邮件与我联系。
作者
Artur Barseghyan artur.barseghyan@gmail.com